一、RBAC分析
基于角色的权限访问控制(Role-Based Access Control),这里存在这么几个玩意儿:角色、权限,用户
表:roles、permissions、role_has_permissions、model_has_roles、model_has_permissions(最后两张表可以看4.1有解释)
明确:用户属于什么角色,那么角色拥有什么权限,用户自然拥有
然后配置,就戳这里(后面就不添加了)~
二、角色的增删改查
这个就很普通的功能了,略???
但是有一些需要注意的地方:
1. 更新操作时,method使用PUT
2. Laravel的唯一性验证举例:'title' => 'required|unique:roles,title,'.$id,
解释:对title字段进行验证——必填|唯一性验证:从拿一张表进行验证,验证什么字段,不验证当前字段(意思就是:比如你要修改的信息叫张三,表里面只有你当前编辑的这条记录是张三,所以忽略要这条记录,不然不就不唯一了嘛~)
3.Laravel再进行更新、删除操作时,需要进行传参(也就是你要删除那一条记录的唯一标识),而要想获取这个参数可以使用:$this->route('XXX')
三、权限(很重要,自学的过程中卡了好久)
控制权限的方式有很多种,但我个人认为,(也是组长要求哈哈哈哈)最合适的方式是中间件
1. 路由定义
1 // 权限管理 2 Route::get('role/permission/{role}', 'RoleController@permission');//页面显示 3 Route::post('role/permission/{role}', 'RoleController@permissionStore');//提交表单
2. 页面展示
无论通过Modals还是页面来显示权限页面都可以,我觉得少的话使用Modals(注意使用Modals的话,就不用show方法了),多的话页面展示
然后就是遍历权限,有两种方法
方法一:遍历permission.php文件
方法二:通过方法来获取
1 public function permission(Role $role) 2 { 3 // 根据guard来获取权限 4 $modules = \HDModule::getPermissionByGuard('admin'); 5 6 // 分配 7 // 之所以分配role是因为1.要进行checkbox选中判断,也就是判断当前用户是否有某权限 2.提交表单role_id 8 return view('admin::role.permission', compact('role'), compact('modules')); 9 }
然后就可以进行页面渲染了,@foreach就好啦~ 里面的一大堆input只是样式啦~
1 @extends('admin::layouts.master') 2 @section('content') 3 @component('components.tabs',['title'=>$role->title.'权限设置']) 4 @slot('nav') 5 <li class="nav-item"><a href="/admin/role" class="nav-link">角色列表</a></li> 6 <li class="nav-item"><a href="#" class="nav-link active">权限设置</a></li> 7 @endslot 8 @slot('body') 9 <form action="/admin/role/permission/{{$role['id']}}" method="post"> 10 @csrf 11 @foreach($modules as $module) 12 <div class="card-body pb-0"> 13 @foreach($module['rules'] as $rule) 14 <div class="card card-flat"> 15 <div class="card-header">{{$rule['group']}}</div> 16 <div class="col-12 col-sm-8 col-lg-6 form-check mt-2"> 17 @foreach($rule['permissions'] as $k=>$permission) 18 <p hidden>{{$i = $k + rand(0,1000000)}}</p> 19 <div class="checkboxWrapper theme3 extraSmallCheckboxSize mr-3" 20 style="float: left;"> 21 <input type="checkbox" name="name[]" id="sample{{$i}}" 22 {{$role->hasPermissionTo($permission['name'])?'checked=""':''}} value="{{$permission['name']}}"> 23 <label for="sample{{$i}}"> 24 <i> 25 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" 26 xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 27 width="50px" height="50px" viewBox="0 0 50 50" 28 enable-background="new 0 0 50 50" xml:s