1. 程式人生 > 實用技巧 >後臺給角色賦予許可權

後臺給角色賦予許可權

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');
    }