PHP 后台权限 分为
权限,角色,和用户
角色有不同的权限,用户有不同的角色,当然你也可以让用户只有一个角色。
所以我们要建四个表
public function up()
{
//角色表
Schema::create('admin_roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name',30)->default('');
$table->string('description',100)->default('');
$table->timestamps();
});
//权限表
Schema::create('admin_permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('name',30)->default('');
$table->string('description',100)->default('');
$table->timestamps();
});
//角色权限表
Schema::create('admin_permission_roles', function (Blueprint $table) {
$table->increments('id');
$table->integer('role_id');
$table->integer('permission_id');
$table->timestamps();
});
//用户角色表
Schema::create('admin_role_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('role_id');
$table->integer('user_id');
});
}
然后进行模型关联
1.权限与角色 之间的多对多关联
//权限属于那个角色
public function roles()
{
return $this->belongsToMany(\App\AdminRole::class,'admin_permission_roles','permission_id','role_id')->withPivot(['permission_id','role_id']);
}
/*
* 当前角色的所有权限
*/
public function permissions()
{
return $this->belongsToMany(\App\AdminPermission::class, 'admin_permission_role', 'permission_id', 'role_id')->withPivot(['permission_id', 'role_id']);
}
2.角色与用户 之间的关联
/*
* 一个用户有哪些角色
*/
public function roles()
{
return $this->belongsToMany(\App\AdminRole::class, 'admin_role_user', 'user_id', 'role_id')->withPivot(['user_id', 'role_id']);
}
3 使用Gate来进行权限控制,在路由 和 前台 一起进行权限控制。
$permissions = \App\AdminPermission::with('roles')->get();
foreach ($permissions as $permission) {
Gate::define($permission->name, function($user) use($permission) {
return $user->hasPermission($permission);
});
}
//路由
Route::group(['middleware'=>'can:system'], function (){
});
//前台
@can('post')
@endcan