後臺給角色賦予許可權
阿新 • • 發佈:2020-12-06
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');
}