PHP Laravel框架用户权限管理,按钮级别控制

环境配置:
系统:linux
语言:php
框架:Laravel 5.8
主要技术:Zizaco/Entrust扩展包,MySQL,PHP,Composer
 
扩展包名称:Zizaco/Entrust安装配置:// 1. 在项目根目录运行composer require zizaco/entrust// 2. 在config/App.php文件 [providers]数组中添加一项:ZizacoEntrustEntrustServiceProvider::class,// 3.在config/app.php文件 [aliases]数组中添加一项:'Entrust'=> ZizacoEntrustEntrustFacade::class,// 4. 生成迁移文件(这一步之前必须配置好数据库连接) php artisan entrust:migration // 5. 运行迁移文件 php artisan migrate // 可能报错如下: IlluminateDatabaseQueryException: SQLSTATE[42000]:Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))// 解决方式:在 app/Providers/AppServiceProvider.php文件 【boot】方法中 添加:Schema::defaultStringLength(191);// 6. 这时数据库中会创建4个表1. permissions -----------权限表2. permission_role ------ 权限角色关系表3. roles ------------------ 角色表4. role_user ------------- 角色用户关系表// 7. 在用户表模型中添加: // ...省略多余代码 use ZizacoEntrustTraitsEntrustUserTrait;class User extends Authenticatable{use EntrustUserTrait;use Notifiable;// ...省略多余代码}// 8. 创建表模型,在项目根目录运行 php artisan make:model Model/Role php artisan make:model Model/Permission至此;配置部分完毕!创建数据、模拟用户登陆

  1. 创建角色 (创建两个角色,后期测试会用到)
public function createRoles() {// 创建第一个角色$roleModel= new Role();$roleModel->name= 'admin'; //角色名称$roleModel->display_name = '管理员'; //角色可读名称$roleModel->save();// 创建第二个角色$roleModel= new Role();$roleModel->name= 'ordinary'; //角色名称$roleModel->display_name = '普通用户'; //角色可读名称$roleModel->save();}//roles表->得到 admin ID 为1,ordinary ID为2
PHP Laravel框架用户权限管理,按钮级别控制

文章插图
Table roles 数据
  1. 创建权限(可细分的权限)
// 创建权限public function createPermissions(){// 创建第一个权限$permissionModel= new Permission();$permissionModel->name= 'btn_display'; //权限名称$permissionModel->display_name = '按钮可见'; //权限可读名称$permissionModel->save();// 创建第二个权限$permissionModel= new Permission();$permissionModel->name= 'menu_display'; //权限名称$permissionModel->display_name = '菜单可见'; //权限可读名称$permissionModel->save();}// permissions表->得到 btn_display ID为1 menu_display ID为2
PHP Laravel框架用户权限管理,按钮级别控制

文章插图
Table permissions 数据
  1. 为角色分配权限
public function setRolesPerm(){// 1. 设置 admin 角色权限// 获取角色ID$user_id= Role::where('name', 'admin')->first(['id']);// 获取所有权限,让admin拥有所有权限$permissions = Permission::get(['id']);// 向 permission_role 表中写入数据foreach ($permissions as $per) {DB::table('permission_role')->insert(['permission_id' => $per->id,'role_id'=> $user_id->id,]);}// 1. 设置 ordinary 角色权限// 获取角色ID$user_id= Role::where('name', 'ordinary')->first(['id']);// 获取所有权限,让ordinary只拥有按钮可见权限$permissions = Permission::where('name', 'btn_display')->first(['id']);// 向 permission_role 表中写入数据DB::table('permission_role')->insert(['permission_id' => $per->id,'role_id'=> $user_id->id,]);}
PHP Laravel框架用户权限管理,按钮级别控制

文章插图
Table permission_role 数据
  1. 创建用户
public function createUser(){$userModel= new User();$userModel->name= 'admin';$userModel->email= '1234567@qq.com';$userModel->password = '123456'; //未做加密处理,生产环境请做加密$userModel->save();$userModel= new User();$userModel->name= 'test';$userModel->email= '123456789@qq.com';$userModel->password = '123456'; //未做加密处理,生产环境请做加密$userModel->save();} 
PHP Laravel框架用户权限管理,按钮级别控制

文章插图
Table users 数据
  1. 为用户分配角色组
public function setUserRole(){// 1. 赋予 admin 用户 admin 角色$user_info = User::where('name', 'admin')->first();$role_info = Role::where('name', 'admin')->first();$user_info->attachRole($role_info);// 1. 赋予 test 用户 ordinary 角色$user_info = User::where('name', 'test')->first();$role_info = Role::where('name', 'ordinary')->first();$user_info->attachRole($role_info);}


推荐阅读