千家信息网

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服务器怎么看操作日志 建设网络安全大脑 断开数据库的全部连接
0