php artisan make:model Menu 这个只是一个辅助类,不用创建真实的数据库
更改Models\Model.php如下:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Menu extends Model
{
use HasFactory;
public $cat;
public $act;
public function __construct($cat,$act){
$this->cat = $cat;
$this->act = $act;
}
}
我们自定义一个模板指令,用来在前端控制用户是否有某个按钮的操作权限,更改AppServiceProvider.php如下:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Blade;
use App\Models\Menu;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
Schema::defaultStringLength(200);
Blade::if('myact',function($expression){
list($act,$cat) = explode(',',$expression);
$admin = auth('admin')->user();
$menu = new Menu($act,$cat);
$state = $admin->can('update',$menu);
return $state;
});
}
}
我们在MenuPolicy里添加逻辑判断的逻辑如下:
<?php
namespace App\Policies;
use App\Models\Menu;
use App\Models\Admin;
use Illuminate\Auth\Access\HandlesAuthorization;
class MenuPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(Admin $admin)
{
//
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\Menu $menu
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(Admin $admin, Menu $menu)
{
//
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(Admin $admin,Menu $menu)
{
//
return $this->checkPolicy($admin->rightsRole->right,$menu);
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Menu $menu
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(Admin $admin, Menu $menu)
{
//
return $this->checkPolicy($admin->rightsRole->right,$menu);
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Menu $menu
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(Admin $admin, Menu $menu)
{
//
return $this->checkPolicy($admin->rightsRole->right,$menu);
}
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\Menu $menu
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(Admin $admin, Menu $menu)
{
//
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Menu $menu
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(Admin $admin, Menu $menu)
{
//
}
public function checkPolicy($admin, $menu){
$contents = explode(',',$admin->content);
foreach($contents as $k=>$v)
{
if(strlen($v))
{
$varr = explode('|',$v);
if($varr[0]==$menu->cat && ($varr[1]&$menu->act)==$menu->act)
{
return true;
}
}
}
return false;
}
}
我们使用自定义的模板指令,来添加模板中的按钮验证,依据我们的菜单config\menu.php里的配置来进行配置:
admin.blade.php如下:
@extends('admin.common')
@section('content')
@myact('1_11,1')
@endmyact
ID
名称
操作
@foreach ($admins as $k=>$v)
{{$v['id']}}
{{$v['username']}}
@myact('1_11,2')
@endmyact
@myact('1_11,4')
@endmyact
@endforeach
添加人员
@endsection
@section('javascript')
@endsection
role.blade.php如下:
@extends('admin.common')
@section('content')
@myact('1_12,1')
@endmyact
ID
角色名称
操作
@foreach ($roles as $k=>$v)
{{$v['id']}}
{{$v['role_name']}}
@myact('1_12,2')
@endmyact
@myact('1_12,4')
@endmyact
@endforeach
添加角色
@foreach ($menus as $k=>$v)
{{$v['menuName']}}
@if($v['sub'])
@foreach ($v['sub'] as $subk=>$subv)
{{$subv['menuName']}}
@php
$subs = explode(",",$subv['act'])
@endphp
@foreach ($subs as $sk=>$sv)
@php
$acts = explode('_',$sv);
@endphp
@endforeach
@endforeach
@endif
@endforeach
@endsection
@section('javascript')
@endsection
注:
以上我们通过自定义myact的模板指令,在模板中通过使用此指令,把判断的菜单数据传给后台,进行解板判断。
| 留言与评论(共有 0 条评论) “” |