Laravel中怎么实现RBAC权限管理操作
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,Laravel中怎么实现RBAC权限管理操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、建表(用户表、角色表、权限
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
真正的互联网科技公司
南京银行软件开发面试
从事嵌入式软件开发的导师
服务器集中 远程管理软件
网络安全审查办法百度百科
联通软件开发笔试
从美国大选看网络安全问题
负责统筹网络安全工作和监督
浙江软件开发发展状况
移动网连接不上服务器怎么办
武汉熙宁网络技术有限公司
我的世界服务器怎么魔改好
视频软件开发解决方案
网站服务器 php
计算机网络安全国家重点实验室
数字媒体和网络技术有啥不同
网络安全产品评测
软件开发cpu需要多大
梵讯房屋管理系统本地数据库
传统型数据库有哪些
崇明区网络安全创新服务
c语言程序连接数据库设计实训
数据库 linux 监听
wincc如何组态冗余服务器
贵州智慧城管软件开发
数据库中属于数据控制语言的是
数据库中的oledb是什么
win服务器怎么看操作日志
建设网络安全大脑
断开数据库的全部连接