后台——角色赋予权限功能

1.在角色列表页,增加赋予角色权限链接

  <a title="授权" href="{{ url('admin/role/auth/'.$v->id) }}" >

2.创建赋予角色权限路由

    //角色授权路由
    Route::get('role/auth/{id}', 'RoleController@auth');  

3.创建角色授权控制器方法

    //获取授权页面
    public function auth($id)
    {
        //从角色模型中获取当前角色
        $role = Role::find($id);
        //从权限模型中获取所有的权限列表
        $perms = Permission::get();

        //从获取的当前角色中,获取拥有的所有权限
        $own_perms = $role->Permission;
        //dd($own_perms);
        //循环角色拥有的所有权限,获取当前角色拥有的权限的id
        $own_pers = [];
        foreach ($own_perms as $v){            
            $own_pers[] = $v->id;
        }
        //返回视图,将当前角色,所有的权限列表,当前角色拥有的权限id传给模板
        return view('admin.role.auth',compact('role','perms','own_pers'));
    }

4.编写授权页面模板

  • 表单提交地址
    <form class="layui-form" action="{{ url('admin/role/doauth') }}" method="post">
  • 防止csrf
    {{ csrf_field() }}
  • 表单名称
    <span class="x-red">*</span>角色名称
  • 用户拥有的角色id表单项
    <input type="hidden" name="role_id" value="{{ $role->id }}">
  • 用户拥有的角色名称表单项
    <input type="text" value="{{ $role->role_name }}" name="role_name">
  • 循环所有的权限列表
        @foreach($perms as $v)
               //获取每一次循环出来的权限名称$v->per_name
              <input type="checkbox" name="permission_id" title="{{ $v->per_name }}" value="{{ $v->id }}" lay-skin="primary">
        @endforeach
  • 用户拥有的权限默认被选中
       @foreach($perms as $v)
          //如果用户拥有的权限id($v->id)在所有权限列表id数组($own_pers)中,则该权限名称默认被选中
          @if(in_array($v->id,$own_pers))
             <input type="checkbox" checked name="permission_id" title="{{ $v->per_name }}" value="{{ $v->id }}" lay-skin="primary">
          @else
             <input type="checkbox" name="permission_id" title="{{ $v->per_name }}" value="{{ $v->id }}" lay-skin="primary">
          @endif
      @endforeach
  • 授权按钮
     <button class="layui-btn" lay-filter="add" lay-submit="">
         授权
     </button>

5.创建处理授权路由

    //处理角色授权路由
    Route::post('role/doauth', 'RoleController@doAuth');  

6.创建处理授权控制器方法

    //处理授权方法
    public function doAuth(Request $request)
    {
        //1.获取到表单提交过来的角色id,角色名称,拥有的权限id数组
        $input = $request->except('_token');
        //dd($input);

        //2.删除当前角色已有的权限
        //从中间表中role_permission取出字段为role_id(数据表中角色id)对应的输入的input['role_id'](输入的角色id)删掉
        \DB::table('role_permission')->where('role_id', $input['role_id'])->delete();

        //3.添加新授予的权限到中间表role_permission
        if (!empty($input['permission_id'])) {
            //遍历角色拥有的权限id数组
            foreach ($input['permission_id'] as $v) {
                //每次获取到的权限id:$v,向中间表role_permission插入数据
                //role_id字段对应的是输入的$input['role_id'],permission_id字段对应的是循环出来的$v
                \DB::table('role_permission')->insert(['role_id' => $input['role_id'], 'permission_id' => $v]);
            }
        }
        return redirect('admin/role');
    }
posted @ 2020-12-06 20:37  shengge  阅读(697)  评论(0)    收藏  举报