后台——角色赋予权限功能
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');
}
浙公网安备 33010602011771号