zoukankan      html  css  js  c++  java
  • laravel rbac笔记片段

    三表:用户表、角色表、权限表

    角色表:role

     

    权限表:auth

    1、创建需要迁移文件

    php artisan make:migration create_role_table
    php artisan make:migration create_auth_table

    2、迁移代码

    2020_04_05_003842_create_role_table.php
    <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    class CreateRoleTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('role', function (Blueprint $table) {
                $table->increments('id');
                $table->string('role_name',20)->notNull();
                $table->text('auth_ids');
                $table->text('auth_ac');
    
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('role');
        }
    }
    2020_04_05_003854_create_auth_table.php

    ②执行迁移文件生成数据表

    php artisan migrate

    3 确定需要的路由

    添加页面:/admin/auth/add                            any类型

    列表页面:/admin/auth/index                         get类型

    4 创建需要的控制器文件

    php artisan make:controller Admin/AuthController

     5 创建2个方法,Auth控制器下的index方法、add方法,展示各自的视图即可

    6 权限的添加

    先添加auth模型

    php artisan make:model Admin/Auth

    定义模型

    protected $table="auth";
    public $timestamps=false;

     控制器中引入模型

    use App\Admin\Auth;

    7、视图代码

    <!DOCTYPE html>
    <html class="x-admin-sm">
    <head>
        <meta charset="UTF-8">
        <title>添加权限</title>
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport"
              content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
        <link rel="stylesheet" href="/static/css/font.css">
        <link rel="stylesheet" href="/static/css/style.css">
        <script src="/static/lib/layui/layui.js" charset="utf-8"></script>
        <script type="text/javascript" src="/static/js/xadmin.js"></script>
        <script type="text/javascript" src="/static/js/jquery.min.js"></script>
        <!--[if lt IE 9]>
        <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
        <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>
    <body>
    <div class="x-nav">
              <span class="layui-breadcrumb">
                <a href="">首页</a>
                <a href="">演示</a>
                <a>
                  <cite>导航元素</cite></a>
              </span>
        <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right"
           onclick="location.reload()" title="刷新">
            <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
    </div>
    <div class="layui-fluid">
        <div class="layui-row layui-col-space15">
            <div class="layui-col-md12">
                <div class="layui-card">
                    <div class="layui-card-body ">
                        <form method="post" id="auth_from" class="layui-form layui-col-space5"
                              action="{{route('auth_add')}}">
    
                            <div class="layui-inline layui-show-xs-block">
                                <input class="layui-input" placeholder="权限名(必填)" id="auth_name" name="auth_name">
                            </div>
                            <div class="layui-inline layui-show-xs-block">
                                <input id="controller" class="layui-input" placeholder="控制器名" name="controller">
                            </div>
                            <div class="layui-inline layui-show-xs-block">
                                <input class="layui-input" placeholder="方法名" name="action" id="action">
                            </div>
                            <div class="layui-inline layui-show-xs-block">
    
                                <select name="pid" id="select" lay-filter="select">
                                    <option value="0">作为顶级权限</option>@foreach($data as $val)
                                        <option value="{{$val->id}}">{{$val->auth_name}}</option>
                                    @endforeach
                                </select>
                            </div>
                            <div class="layui-inline layui-show-xs-block">
                                <input type="checkbox" name="is_nav" lay-skin="primary" title="作为导航" value="1" checked="">
                            </div>
                            <div class="layui-inline layui-show-xs-block">
                                <button class="layui-btn" lay-submit="" lay-filter="auth_add"><i class="layui-icon"></i>增加
                                </button>
                            </div>{{csrf_field()}}
                        </form>
                    </div>
                    <div class="layui-card-header">
                        <button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除
                        </button>
                    </div>
                    <div class="layui-card-body ">
                        <table class="layui-table layui-form">
                            <thead>
                            <tr>
                                <th>
                                    <input type="checkbox" name="" lay-skin="primary">
                                </th>
                                <th>ID</th>
                                <th>权限名称</th>
                                <th>控制器名称</th>
                                <th>方法名称</th>
                                <th>父级权限</th>
                                <th>作为导航</th>
                                <th>操作</th>
                            </thead>
                            <tbody>
                            @foreach($result as $val)
                            <tr>
                                <td>
                                    <input type="checkbox" name="" lay-skin="primary">
                                </td>
                                <td>{{$val->id}}</td>
                                <td>@if ($val->auth_name){{$val->auth_name}} @else N/A @endif</td>
                                <td>@if ($val->controller){{$val->controller}}@else N/A @endif</td>
                                <td>@if($val->action){{$val->action}}@else N/A @endif</td>
                                <td>@if($val->parent_name){{$val->parent_name}}@else N/A @endif</td>
                                <td>@if($val->is_nav=='1')是 @else 否 @endif</td>
                                <td class="td-manage">
                                    <a title="编辑" onclick="xadmin.open('编辑','xxx.html')" href="javascript:">
                                        <i class="layui-icon">&#xe642;</i>
                                    </a>
                                    <a title="删除" onclick="member_del(this,'要删除的id')" href="javascript:">
                                        <i class="layui-icon">&#xe640;</i>
                                    </a>
                                </td>
                            </tr>@endforeach
                            </tbody>
                        </table>
                    </div>
                    <div class="layui-card-body ">
                        <div class="page">
                            <div>
                                <a class="prev" href="">&lt;&lt;</a>
                                <a class="num" href="">1</a>
                                <span class="current">2</span>
                                <a class="num" href="">3</a>
                                <a class="num" href="">489</a>
                                <a class="next" href="">&gt;&gt;</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script language="JavaScript">
        layui.use(['laydate', 'form'], function () {
            var laydate = layui.laydate;
            var form = layui.form;
            $("#controller,#action").hide();
            form.on('select(select)', function (data) {
                var _val =$("#select").val();
               if (_val >0){
                   $("#controller,#action").show();
               }else{
                   $("#controller,#action").val('');
                   $("#controller,#action").hide();
               }
            });
            form.on('submit(auth_add)', function (data) {
                data = data.field;
                if (data.auth_name.length < 3) {
                    layer.tips('权限名必须大于2个汉字', '#auth_name', {
                        tips: [3, '#009688']
                    });
                    return false;
                }
                $.ajax({
                    url: '{{route('auth_add')}}',
                    data: data,
                    dataType: 'text',
                    type: 'post',
                    success: function (data) {
                        if (data == 1) {
                            layer.alert('添加成功', {
                                icon: 1,
                                skin: 'layui-layer-molv' //样式类名
                                , closeBtn: 0
                            },function(){
                                window.location.reload();
                               // document.getElementById("auth_from").reset();
                                $("#auth_from")[0].reset();
                            });
                        } else {
                            layer.alert('添加失败', {
                                icon: 2,
                                skin: 'layui-layer-molv' //样式类名
                                , closeBtn: 0
                            });
                        }
                    }
                });
                return false;
            });
            //执行一个laydate实例
            laydate.render({
                elem: '#start' //指定元素
            });
    
            //执行一个laydate实例
            laydate.render({
                elem: '#end' //指定元素
            });
        });
    
        /*用户-停用*/
        function member_stop(obj, id) {
            layer.confirm('确认要停用吗?', function (index) {
    
                if ($(obj).attr('title') == '启用') {
    
                    //发异步把用户状态进行更改
                    $(obj).attr('title', '停用');
                    $(obj).find('i').html('&#xe62f;');
    
                    $(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
                    layer.msg('已停用!', {icon: 5, time: 1000});
    
                } else {
                    $(obj).attr('title', '启用');
                    $(obj).find('i').html('&#xe601;');
    
                    $(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已启用');
                    layer.msg('已启用!', {icon: 5, time: 1000});
                }
    
            });
        }
    
        /*用户-删除*/
        function member_del(obj, id) {
            layer.confirm('确认要删除吗?', function (index) {
                //发异步删除数据
                $(obj).parents("tr").remove();
                layer.msg('已删除!', {icon: 1, time: 1000});
            });
        }
    
    
        function delAll(argument) {
    
            var data = tableCheck.getData();
    
            layer.confirm('确认要删除吗?' + data, function (index) {
                //捉到所有被选中的,发异步进行删除
                layer.msg('删除成功', {icon: 1});
                $(".layui-form-checked").not('.header').parents('tr').remove();
            });
        }
    </script>
    </body>
    
    
    </html>
    View Code

    8、 控制器代码

    <?php
    
        namespace App\Http\Controllers\Admin;
    
        use App\Http\Controllers\Controller;
        use Illuminate\Http\Request;
        use App\Admin\Auth;
        use DB;
    
        class AuthController extends Controller
        {
            public function index()
            {
                $data=Auth::where('pid','=','0')->get();
                $result=DB::table('auth as t1') ->select('t1.*','t2.auth_name as parent_name')->leftJoin('auth as t2','t1.pid','=','t2.id')->get();
                return view('admin.auth_index',compact('data','result'));
    
            }
    
            public function add(Request $request)
            {
                $this->validate($request, [
                    'auth_name' => 'required|min:3',  //最小2
                ]);
                $data = $request->except('_token');
                $result = Auth::insert($data);
                return $result ? '1' : '0';
            }
    
        }
    

     上面auth控制器已经实现了权限的添加和查询

    9 角色的增删改查

            Route::get('role/index', 'Admin\RoleController@index')->name('role_index');
            Route::any('role/add', 'Admin\RoleController@add')->name('role_add');
            Route::any('role/edit', 'Admin\RoleController@edit')->name('role_edit');
            Route::post('role/del', 'Admin\RoleController@del')->name('role_del');

    10 控制器

    <?php
    
        namespace App\Http\Controllers\Admin;
        use App\Admin\Role;
        use App\Http\Controllers\Controller;
        use Illuminate\Http\Request;
        use App\Admin\Auth;
    
        class RoleController extends Controller
        {
            public function index()
            {
                $data = Role::all();
                return view('admin.role_index', compact('data'));
            }
    
            public function add(Request $request)
            {
                if ($request->isMethod('post')) {
                    $this->validate($request, [
                        'role_name' => 'required|min:2',  //最小2字符
                    ]);
                    $data = $request->except('_token');
                    if ($request->get('auth_ids')) {
                        $role=new Role();
                        return $role->assignRole($data);
                    } else {
    
                        return Role::insert($data);
                    }
                } else {
                    $top = Auth::where('pid', '0')->get();
                    $cat = Auth::where('pid', '!=', '0')->get();
                    return view('admin.role_add', compact('top', 'cat'));
                }
            }
    
            public function edit(Request $request){
                $data = $request->except('_token');
                if ($request->isMethod('post')){
                    if ($request->get('auth_ids')){
                        $role=new Role();
                        return $role->assignRole($data);
                    }else{
                        $post=[];
                        $post['auth_ids']='';
                        $post['auth_ac']='';
                        return Role::where('id',$data['id'])->update($post);
                    }
                }else{
                    $result=Role::where('id',$request->get('id'))->get();
                    $top = Auth::where('pid', '0')->get();
                    $cat = Auth::where('pid', '!=', '0')->get();
                    return view('admin.role_edit', compact('top', 'cat','result'));
                }
    
            }
            public function del(Request $request){
                $this->validate($request,[
                    'id' => 'required',
                ]);
                $data=$request->only('id');
                return Role::where('id',$data['id'])->delete();
    
            }
    
        }

    11 视图文件

    index

    <!DOCTYPE html>
    <html class="x-admin-sm">
        <head>
            <meta charset="UTF-8">
            <title>欢迎页面-X-admin2.2</title>
            <meta name="renderer" content="webkit">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
            <link rel="stylesheet" href="/static/css/font.css">
            <link rel="stylesheet" href="/static/css/style.css">
            <script src="/static/lib/layui/layui.js" charset="utf-8"></script>
            <script type="text/javascript" src="/static/js/xadmin.js"></script>
            <!--[if lt IE 9]>
              <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
              <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
            <![endif]-->
        </head>
        <body>
            <div class="x-nav">
              <span class="layui-breadcrumb">
                <a href="">首页</a>
                <a href="">演示</a>
                <a>
                  <cite>导航元素</cite></a>
              </span>
              <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
                <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
            </div>
            <div class="layui-fluid">
                <div class="layui-row layui-col-space15">
                    <div class="layui-col-md12">
                        <div class="layui-card">
                            <div class="layui-card-body ">
                                <form class="layui-form layui-col-space5">
                                    <div class="layui-inline layui-show-xs-block">
                                        <input class="layui-input"  autocomplete="off" placeholder="开始日" name="start" id="start">
                                    </div>
                                    <div class="layui-inline layui-show-xs-block">
                                        <input class="layui-input"  autocomplete="off" placeholder="截止日" name="end" id="end">
                                    </div>
                                    <div class="layui-inline layui-show-xs-block">
                                        <input type="text" name="username"  placeholder="请输入用户名" autocomplete="off" class="layui-input">
                                    </div>
                                    <div class="layui-inline layui-show-xs-block">
                                        <button class="layui-btn"  lay-submit="" lay-filter="sreach"><i class="layui-icon">&#xe615;</i></button>
                                    </div>
                                </form>
                            </div>
                            <div class="layui-card-header">
                                <button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除</button>
                                <button class="layui-btn" onclick="xadmin.open('添加角色','{{route('role_add')}}',800,600)"><i class="layui-icon"></i>添加角色</button>
                            </div>
                            <div class="layui-card-body ">
                                <table class="layui-table layui-form">
                                  <thead>
                                    <tr>
                                      <th>
                                        选择
                                      </th>
                                      <th>ID</th>
                                      <th>角色名</th>
                                     {{-- <th>权限Id集合</th>
                                      <th>权限Ac集合</th>--}}
                                      <th>状态</th>
                                      <th>操作</th>
                                  </thead>
                                  <tbody>
                                  @foreach($data as $val)
                                    <tr>
                                      <td width="80">
                                        <input type="checkbox" name=""  lay-skin="primary">
                                      </td>
                                      <td width="80">{{$val->id}}</td>
                                      <td width="120">{{$val->role_name}}</td>
                                      {{-- <td>{{$val->auth_ids}}</td>
                                      <td>{{$val->auth_ac}}</td> --}}
                                      <td class="td-status"  width="80">
                                        <span class="layui-btn layui-btn-normal layui-btn-xs">已启用</span></td>
                                      <td class="td-manage">
                                        <a onclick="member_stop(this,'10001')" href="javascript:;"  title="启用" class="layui-btn layui-btn-xs layui-btn-primary">
                                          <i class="layui-icon"  >&#xe601;</i>启用
                                        </a>
                                        <a title="编辑权限"  onclick="xadmin.open('编辑','{{route('role_edit')}}?id={{$val->id}}','900','500')" href="javascript:;" class="layui-btn layui-btn-xs layui-btn-primary">
                                          <i class="layui-icon">&#xe642;</i>编辑
                                        </a>
                                        <a title="删除" onclick="role_del(this,'{{$val->id}}')" href="javascript:;" class="layui-btn layui-btn-xs layui-btn-primary">
                                          <i class="layui-icon">&#xe640;</i>删除
                                        </a>
                                      </td>
                                    </tr>@endforeach
                                  </tbody>
                                </table>
                            </div>
                            <div class="layui-card-body ">
                                <div class="page">
                                    <div>
                                      <a class="prev" href="">&lt;&lt;</a>
                                      <a class="num" href="">1</a>
                                      <span class="current">2</span>
                                      <a class="num" href="">3</a>
                                      <a class="num" href="">489</a>
                                      <a class="next" href="">&gt;&gt;</a>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </body>
        <script>
          layui.use(['laydate','form'], function(){
            var laydate = layui.laydate;
            var form = layui.form;
    
            //执行一个laydate实例
            laydate.render({
              elem: '#start' //指定元素
            });
            laydate.render({
              elem: '#end' //指定元素
            });
          });
    
           /*用户-停用*/
          function member_stop(obj,id){
              layer.confirm('确认要停用吗?',function(index){
    
                  if($(obj).attr('title')=='启用'){
                    $(obj).attr('title','停用')
                    $(obj).find('i').html('&#xe62f;');
                    $(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
                    layer.msg('已停用!',{icon: 5,time:1000});
                  }else{
                    $(obj).attr('title','启用')
                    $(obj).find('i').html('&#xe601;');
                    $(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已启用');
                    layer.msg('已启用!',{icon: 5,time:1000});
                  }
    
              });
          }
          function role_del(obj,id){
              layer.confirm('确认要删除吗?',function(){
                  $.ajax({
                      url: '{{route('role_del')}}',
                      data: {
                          "id": id,
                          "_token":'{{csrf_token()}}'
                      },
                      dataType: 'text',
                      type: 'post',
                      success: function (data) {
                          if (data == 1) {
                              layer.alert('删除成功', {
                                  icon: 1,
                                  skin: 'layui-layer-molv' //样式类名
                                  , closeBtn: 0
                              },function(){
                                  window.location.reload();
                              });
                          } else {
                              layer.alert('删除失败', {
                                  icon: 2,
                                  skin: 'layui-layer-molv' //样式类名
                                  , closeBtn: 0
                              });
                          }
                      }
                  });
    
    
              });
          }
    
        </script>
    
    </html>
    View Code

    add

    <!DOCTYPE html>
    <html class="x-admin-sm">
    
      <head>
        <meta charset="UTF-8">
        <title>欢迎页面-X-admin2.2</title>
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
        <link rel="stylesheet" href="/static/css/font.css">
        <link rel="stylesheet" href="/static/css/style.css">
        <script type="text/javascript" src="/static/lib/layui/layui.js" charset="utf-8"></script>
        <script type="text/javascript" src="/static/js/xadmin.js"></script>
        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
        <!--[if lt IE 9]>
          <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
          <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
      </head>
    
      <body>
        <div class="layui-fluid">
            <div class="layui-row">
                <form action="" method="post" class="layui-form layui-form-pane">
                    <div class="layui-form-item">
                        <label for="name" class="layui-form-label">
                            <span class="x-red">*</span>角色名
                        </label>
                        <div class="layui-input-inline">
                            <input type="text" id="role_name" name="role_name"   autocomplete="off" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item layui-form-text">
                        <label class="layui-form-label">
                            拥有权限
                        </label>
                        <table  class="layui-table layui-input-block">
                            <tbody>
                            @foreach($top as $val)
                                <tr>
                                    <td>
                                        <input type="checkbox" name="auth_ids[]" lay-skin="primary" lay-filter="father" title="{{$val->auth_name}}" value="{{$val->id}}">
                                    </td>
                                    <td>
                                        <div class="layui-input-block">
                                            @foreach($cat as $val_cat)
                                                @if($val_cat->pid == $val->id)
                                            <input name="auth_ids[]" lay-skin="primary" type="checkbox" title="{{$val_cat->auth_name}}" value="{{$val_cat->id}}">
                                                @endif
                                                @endforeach
                                        </div>
                                    </td>
                                </tr>
                                @endforeach
                            </tbody>
                        </table>
                    </div>
                    <div class="layui-form-item">
                    <button class="layui-btn" lay-submit="" lay-filter="add">增加</button>
                  </div>
                    {{csrf_field()}}
                </form>
            </div>
        </div>
        <script>
            layui.use(['form','layer'], function(){
                $ = layui.jquery;
              var form = layui.form
              ,layer = layui.layer;
              form.on('submit(add)', function(data){
                  data = data.field;
                  if (data.role_name.length < 2) {
                      layer.tips('权限名必须大于1个汉字', '#role_name', {
                          tips: [2, '#009688']
                      });
                      return false;
                  }
                  $.ajax({
                      url: '{{route('role_add')}}',
                      data: data,
                      dataType: 'text',
                      type: 'post',
                      success: function (data) {
                          if (data == 1) {
                              layer.alert('添加成功', {
                                  icon: 1,
                                  skin: 'layui-layer-molv' //样式类名
                                  , closeBtn: 0
                              },function(){
                                  //window.location.reload();
                                  // document.getElementById("auth_from").reset();
                                  //$("#auth_from")[0].reset();
                                  var index = parent.layer.getFrameIndex(window.name);
                                  //关闭当前frame
                                  parent.layer.close(index);
                                  parent.location.reload(); //刷新父级页面
                              });
                          } else {
                              layer.alert('添加失败', {
                                  icon: 2,
                                  skin: 'layui-layer-molv' //样式类名
                                  , closeBtn: 0
                              });
                          }
                      }
                  });
                return false;
              });
    
    
            form.on('checkbox(father)', function(data){
    
                if(data.elem.checked){
                    $(data.elem).parent().siblings('td').find('input').prop("checked", true);
                    form.render();
                }else{
                   $(data.elem).parent().siblings('td').find('input').prop("checked", false);
                    form.render();
                }
            });
    
    
            });
        </script>
      </body>
    
    </html>
    View Code

    edit

    <!DOCTYPE html>
    <html class="x-admin-sm">
    
    <head>
        <meta charset="UTF-8">
        <title>欢迎页面-X-admin2.2</title>
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
        <link rel="stylesheet" href="/static/css/font.css">
        <link rel="stylesheet" href="/static/css/style.css">
        <script type="text/javascript" src="/static/lib/layui/layui.js" charset="utf-8"></script>
        <script type="text/javascript" src="/static/js/xadmin.js"></script>
        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
        <!--[if lt IE 9]>
        <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
        <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>
    
    <body>
    <div class="layui-fluid">
        <div class="layui-row">
            <form action="" method="post" class="layui-form layui-form-pane">
                <div class="layui-form-item">
                    <label for="name" class="layui-form-label">
                        <span class="x-red">*</span>角色名
                    </label>
                    <div class="layui-input-inline">
                        <input readonly="readonly" disabled type="text" id="role_name" name="role_name" autocomplete="off" class="layui-input" value="{{$result[0]->role_name}}">
                    </div>
                </div>
                <div class="layui-form-item layui-form-text">
                    <label class="layui-form-label">
                        拥有权限
                    </label>
                    <table  class="layui-table layui-input-block">
                        <tbody>
                        @foreach($top as $val)
                            <tr>
                                <td>
                                    <input type="checkbox" name="auth_ids[]" lay-skin="primary" lay-filter="father" title="{{$val->auth_name}}" value="{{$val->id}}" @if(in_array($val->id,explode(',',$result[0]->auth_ids))) checked @endif>
                                </td>
                                <td>
                                    <div class="layui-input-block">
                                        @foreach($cat as $val_cat)
                                            @if($val_cat->pid == $val->id)
                                                <input name="auth_ids[]" lay-skin="primary" type="checkbox" title="{{$val_cat->auth_name}}" value="{{$val_cat->id}}" @if(in_array($val_cat->id,explode(',',$result[0]->auth_ids))) checked @endif>
                                            @endif
                                        @endforeach
                                    </div>
                                </td>
                            </tr>
                        @endforeach
                        </tbody>
                    </table>
                </div>
    {{csrf_field()}}
                <div class="layui-form-item">
                    <button class="layui-btn" lay-submit="" lay-filter="edit">增加</button>
                </div>
            </form>
        </div>
    </div>
    <script>
        layui.use(['form','layer'], function(){
            $ = layui.jquery;
            var form = layui.form
                ,layer = layui.layer;
            form.on('submit(edit)', function(data){
                data = data.field;
                $.ajax({
                    url: '',
                    data: data,
                    dataType: 'text',
                    type: 'post',
                    success: function (data) {
                        if (data == 1) {
                            layer.alert('修改成功', {
                                icon: 1,
                                skin: 'layui-layer-molv' //样式类名
                                , closeBtn: 0
                            },function(){
                                //window.location.reload();
                                // document.getElementById("auth_from").reset();
                                //$("#auth_from")[0].reset();
                                var index = parent.layer.getFrameIndex(window.name);
                                //关闭当前frame
                                parent.layer.close(index);
                                parent.location.reload(); //刷新父级页面
                            });
                        } else {
                            layer.alert('权限无改变,修改失败!', {
                                icon: 2,
                                skin: 'layui-layer-molv' //样式类名
                                , closeBtn: 0
                            });
                        }
                    }
                });
                return false;
            });
    
    
            form.on('checkbox(father)', function(data){
    
                if(data.elem.checked){
                    $(data.elem).parent().siblings('td').find('input').prop("checked", true);
                    form.render();
                }else{
                    $(data.elem).parent().siblings('td').find('input').prop("checked", false);
                    form.render();
                }
            });
    
    
        });
    </script>
    
    </body>
    
    </html>
    View Code

    12 role模型

    <?php
    
        namespace App\Admin;
    
        use Illuminate\Database\Eloquent\Model;
    
        class Role extends Model
        {
            protected $table = "role";
            public $timestamps = false;
    
            public function assignRole($data)
            {
                //获取ac字段
                $tmp = \App\Admin\Auth::where('pid', '!=', '0')->whereIn('id', $data['auth_ids'])->get();
                $data['auth_ids'] = implode(',', $data['auth_ids']);
                $ac = '';
                foreach ($tmp as $key => $value) {
                    $ac .= $value->controller . '@' . $value->action . ',';
                }
                $data['auth_ac'] = strtolower(rtrim($ac, ','));
                if(array_key_exists('id',$data)){
                    $post['auth_ids']=$data['auth_ids'];
                    $post['auth_ac']=$data['auth_ac'];
                    return self::where('id',$data['id'])->update($post);
                }else{
                    return self::insert($data);
                }
    
            }
        }

     13 中间件

    创建 中间件

     php artisan make:middleware CheckRbac

    14 注册中间件   app/Http/Kernel.php文件中

    protected $routeMiddleware 数组中加入 
    'checkrbac'        => \App\Http\Middleware\CheckRbac::class,

    15 使用中间件  web.php中

    Route::group(['prefix' => 'admin', 'middleware' => ['auth:admin','checkrbac']], function () {

     16 中间件代码

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Route;  //因为要获取当前路由 需要引入
    use Auth;  //获取当前用户的信息   需要引入
    
    class CheckRbac
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
    if(Auth::guard('admin') -> user() -> role_id != '1'){  //获取当前用户角色的id
    $route = Route::currentRouteAction();//获取当前路由 $ac = Auth::guard('admin') -> user() -> role -> auth_ac; //获取ac集合 $ac = strtolower($ac . ',indexcontroller@index,indexcontroller@welcome'); $routeArr = explode('\\', $route); //将当前路由分割为数组 因为\是转移符 所以用\\ if(strpos($ac,strtolower(end($routeArr))) === false){ exit("<h1>您没有访问权限!</h1>"); } } return $next($request); } }
  • 相关阅读:
    企业网络设计 华为S系列园区交换机组网
    zabbix安装注意以下几个部分
    grafana custom dashboard
    prometheus 生产环境部署
    Cephadm部署ceph octopus (15.2.13 )
    ipmi之外的新的选择redfish
    mongo & mongoexpress & redis & redisinsight 容器化安装
    ceph cluster 部署 (cephadm)
    kubernetes 1.21 helm3
    kubernetes 1.21部署 kubeprometheus
  • 原文地址:https://www.cnblogs.com/linzenews/p/12635568.html
Copyright © 2011-2022 走看看