环境配置:
系统: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至此;配置部分完毕!
创建数据、模拟用户登陆
- 创建角色 (创建两个角色,后期测试会用到)
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
文章插图
Table roles 数据
- 创建权限(可细分的权限)
// 创建权限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
文章插图
Table permissions 数据
- 为角色分配权限
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,]);}
文章插图
Table permission_role 数据
- 创建用户
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();}
文章插图
Table users 数据
- 为用户分配角色组
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);}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 小程序云托管无需服务器部署PHP
- 字节跳动 Go RPC 框架 KiteX 性能优化实践
- PHP使用http_build_query构造URL字符串的方法
- shiro 安全框架入门,看这一篇就够了
- 什么是2021年最佳的后端开发框架
- Shiro框架详解
- 用 C# 实现一个简单的日志框架
- 探索3种顶级「集成框架」Apache、Spring和Mule
- 基于阿里Ant Design构建的高颜值开源管理后台UI框架
- Spring框架是怎么解决Bean之间的循环依赖的