当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel框架实现的rbac权限管理操作示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-04 10:08:26 浏览: 评论:0 

这篇文章主要介绍了Laravel框架实现的rbac权限管理操作,结合实例形式分析了Laravel框架权限控制rbac相关数据库创建、读写及权限判断等操作技巧,需要的朋友可以参考下。

本文实例讲述了Laravel框架实现的rbac权限管理操作,分享给大家供大家参考,具体如下:

介绍:根据不同的权限,在菜单栏显示不同的功能,只对菜单进行了限制,若对路由也进行限制,请自行完善

1、建表(用户表、角色表、权限表、用户角色表、角色权限表)

  1. CREATE TABLE IF NOT EXISTS mr_role 
  2. id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id'
  3. name varchar(30) NOT NULL COMMENT '角色名' 
  4. )ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='角色表'
  5. CREATE TABLE IF NOT EXISTS mr_privilege 
  6. id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id'
  7. name varchar(30) NOT NULL COMMENT '权限名'
  8. route varchar(50) NOT NULL COMMENT '权限所有的路由'
  9. description varchar(100) NOT NULL COMMENT '权限的描述' 
  10. )ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='权限表'
  11. CREATE TABLE IF NOT EXISTS mr_user_role 
  12. id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id'
  13. user_id int(11) NOT NULL COMMENT '用户id'
  14. role_id int(11) NOT NULL COMMENT '角色id' 
  15. )ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='用户角色表'
  16. CREATE TABLE IF NOT EXISTS mr_role_privilege 
  17. id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id'
  18. role_id int(11) NOT NULL COMMENT '角色id'
  19. privilege_id int(11) NOT NULL COMMENT '权限id' 
  20. )ENGINE=innodb DEFAULT CHARSET=utf8 COMMENT='角色权限表'

2、在用户模型和角色模型中实现多对多

  1. class User extends Model 
  2.   protected $primaryKey = 'id'
  3.   protected $table = 'user'
  4.   public $timestamps = false; 
  5.   public $guarded = []; 
  6.   public function roles() 
  7.   { 
  8.     return $this->belongsToMany('App\Model\Role''user_role''user_id''role_id')->withPivot('user_id''role_id'); 
  9.   } 
  10. class Role extends Model 
  11.   protected $table = 'role'
  12.   protected $primaryKey = 'id'
  13.   public $timestamps = false; 
  14.   public $guarded = []; 
  15.   public function privileges() 
  16.   { 
  17.     return $this->belongsToMany('App\Model\Privilege''role_privilege''role_id''privilege_id')->withPivot(['role_id''privilege_id']); 
  18.   } 

3、将菜单视为公共区域,在app\Providers\AppServiceProvider.php里写

  1. public function boot() 
  2.     \View::composer('layout.slide'function($view) { 
  3.       $roles_id = User::find(session('user')['id'])->roles->map(function ($role) { 
  4.         return $role->id; 
  5.       });  // 使用map,最终得到的结果$roles_id = [1, 2, ...] 
  6.       $privileges = []; 
  7.       foreach ($roles_id as $role) { 
  8.         $privileges = array_merge($privileges, Role::find($role)->privileges->map(function ($privilege) { 
  9.           return [$privilege->name, $privilege->route]; 
  10.         })->toArray()); 
  11.       }  // 得到的结果,$prpvileges = [['index/..', '列表'], ['', '']] 
  12.       $view->with('privileges'$privileges); 
  13.     }); 

4、菜单的实现(可以直接遍历一个div,我这里因为有不同的样式,便用了判断)

  1. @foreach ($privileges as $privilege) 
  2.       @if ($privilege[1] == 'key/index' && $privilege[0] == '键名列表') 
  3.         <div class="slide__left__key" style="margin-top: 10px;"><a href="{{ url('key/index') }}" rel="external nofollow" ><span class="glyphicon glyphicon-th"></span> 键名列表</a></div> 
  4.       @endif 
  5.       @if ($privilege[1] == 'key/create' && $privilege[0] == '添加键名') 
  6.           <div class="slide__left__key"><a href="{{ url('key/create') }}" rel="external nofollow" ><span class="glyphicon glyphicon-plus"></span> 添加键名</a></div> 
  7.       @endif 
  8.       @if ($privilege[1] == 'project/index' && $privilege[0] == '项目列表') 
  9.           <div class="slide__left__key" style="margin-top: 20px;"><a href="{{ url('project/index') }}" rel="external nofollow" ><span class="glyphicon glyphicon-th-list"></span> 项目列表</a></div> 
  10.       @endif 
  11.       @if ($privilege[1] == 'project/create' && $privilege[0] == '添加项目') 
  12.           <div class="slide__left__key"><a href="{{ url('project/create') }}" rel="external nofollow" ><span class="glyphicon glyphicon-edit"></span> 添加项目</a></div> 
  13.       @endif 
  14.       @if ($privilege[1] == 'user/index' && $privilege[0] == '用户列表') 
  15.           <div class="slide__left__key" style="margin-top: 20px;"><a href="{{ url('user/index') }}" rel="external nofollow" ><span class="glyphicon glyphicon-th-large"></span> 用户列表</a></div> 
  16.       @endif 
  17.       @if ($privilege[1] == 'user/create' && $privilege[0] == '添加用户') 
  18.           <div class="slide__left__key"><a href="{{ url('user/create') }}" rel="external nofollow" ><span class="glyphicon glyphicon-plus-sign"></span> 添加用户</a></div> 
  19.       @endif 
  20.     @endforeach

Tags: Laravel权限管理 rbac

分享到: