设为首页 加入收藏

TOP

Laravel系列之CMS系统学习 — 角色、权限配置【2】(一)
2019-08-23 00:42:50 】 浏览:121
Tags:Laravel 系列 CMS 系统 学习 角色 权限 配置

一、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
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PHP自定义生成二维码跳转地址 下一篇[Linux] Nginx响应压缩gzip

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目