Laravel中怎么实现RBAC权限管理操作
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,Laravel中怎么实现RBAC权限管理操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、建表(用户表、角色表、权限
千家信息网最后更新 2025年02月01日Laravel中怎么实现RBAC权限管理操作
Laravel中怎么实现RBAC权限管理操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1、建表(用户表、角色表、权限表、用户角色表、角色权限表)
CREATE TABLE IF NOT EXISTS mr_role(id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id',name varchar(30) NOT NULL COMMENT '角色名')ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='角色表';CREATE TABLE IF NOT EXISTS mr_privilege(id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id',name varchar(30) NOT NULL COMMENT '权限名',route varchar(50) NOT NULL COMMENT '权限所有的路由',description varchar(100) NOT NULL COMMENT '权限的描述')ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='权限表';CREATE TABLE IF NOT EXISTS mr_user_role(id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id',user_id int(11) NOT NULL COMMENT '用户id',role_id int(11) NOT NULL COMMENT '角色id')ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='用户角色表';CREATE TABLE IF NOT EXISTS mr_role_privilege(id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id',role_id int(11) NOT NULL COMMENT '角色id',privilege_id int(11) NOT NULL COMMENT '权限id')ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='角色权限表';
2、在用户模型和角色模型中实现多对多
class User extends Model{ protected $primaryKey = 'id'; protected $table = 'user'; public $timestamps = false; public $guarded = []; public function roles() { return $this->belongsToMany('App\Model\Role', 'user_role', 'user_id', 'role_id')->withPivot('user_id', 'role_id'); }}
class Role extends Model{ protected $table = 'role'; protected $primaryKey = 'id'; public $timestamps = false; public $guarded = []; public function privileges() { return $this->belongsToMany('App\Model\Privilege', 'role_privilege', 'role_id', 'privilege_id')->withPivot(['role_id', 'privilege_id']); }}
3、将菜单视为公共区域,在app\Providers\AppServiceProvider.php里写
public function boot(){ \View::composer('layout.slide', function($view) { $roles_id = User::find(session('user')['id'])->roles->map(function ($role) { return $role->id; }); // 使用map,最终得到的结果$roles_id = [1, 2, ...] $privileges = []; foreach ($roles_id as $role) { $privileges = array_merge($privileges, Role::find($role)->privileges->map(function ($privilege) { return [$privilege->name, $privilege->route]; })->toArray()); } // 得到的结果,$prpvileges = [['index/..', '列表'], ['', '']] $view->with('privileges', $privileges); });}
4、菜单的实现(可以直接遍历一个div,我这里因为有不同的样式,便用了判断)
@foreach ($privileges as $privilege) @if ($privilege[1] == 'key/index' && $privilege[0] == '键名列表')@endif @if ($privilege[1] == 'key/create' && $privilege[0] == '添加键名') @endif @if ($privilege[1] == 'project/index' && $privilege[0] == '项目列表') @endif @if ($privilege[1] == 'project/create' && $privilege[0] == '添加项目') @endif @if ($privilege[1] == 'user/index' && $privilege[0] == '用户列表') @endif @if ($privilege[1] == 'user/create' && $privilege[0] == '添加用户') @endif@endforeach
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
角色
权限
用户
项目
模型
结果
菜单
帮助
管理
不同
清楚
内容
区域
对此
文章
新手
更多
样式
知识
行业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全技术应用开题报告
数据库中按大小排序
合肥软件开发驻场费用是多少
公司服务器更新周期
网络上辱骂他人网络安全法
dz计划任务数据库优化
合创软件开发
go 邮件服务器
软件开发工程师专业技术工作
我的世界生存服务器推荐网易
北京软件开发者怎么收费
图像及网络技术中的网页技术
国内数据库发展过程
浙江成功软件开发有限责任公司
怎样查询数据库日志
软件测试数据库面试题2021
教育网络安全建设必要性
邯郸web前端软件开发如何收费
天津综合软件开发批发价格
2022网络安全周的宣传
河北省职称考试数据库操作步骤
行云数据库
快捷指令无法找到服务器
银川网络安全保卫大队
筑牢网络防线提高网络安全意识
博客园个人云服务器
1passe软件开发商
火车管理系统数据库设计
永劫无间服务器会增加吗
vb如何连接sql数据库