后台权限模块——实现用户权限功能
1.新建中间件
f:\xampp\php\php.exe artisan make:middleware HasRole
2.编写中间件
class HasRole
{
public function handle($request, Closure $next)
{
//1.获取当前请求的路由,对应的控制器方法名
//"App\Http\Controllers\Admin\LoginController@index"
$route = Route::current()->getActionName();
//dd($route);
//2.获取当前用户的权限组
//(1)根据session中用户的id,查询出对应的用户信息
$user = User::find(session()->get('user')->user_id);
//(2)通过用户模型关联到角色模型,获取用户对应的所有角色
$roles = $user->role;
//dd($roles);
//(3)循环用户对应的所有角色,获取所有角色对应的所有权限
//存放权限对应的per_url字段值,就是权限列表
$arr = [];
foreach ($roles as $v) {
//每次循环出一个角色,再从角色模型关联到权限模型,获取每个角色对应的所有权限
$perms = $v->Permission;
//循环每个角色对应的所有权限,
foreach ($perms as $perm) {
//(4)将循环出来的所有权限对应的per_url,放进$arr数组中,就是用户拥有的所有权限
$arr[] = $perm->per_url;
}
}
//dd($arr);
//(5)去掉用户拥有的所有角色的所有权限重复的部分
$arr = array_unique($arr);
//3.判断当前请求的路由对应的控制器方法名$route是否在当前用户拥有的所有权限中(也就是$arry中)
//如果当前请求的路由对应的控制器方法名$route在当前用户拥有的所有权限中(也就是$arry中),则继续请求页面
if (in_array($route, $arr)) {
return $next($request);
//否则当前请求的路由对应的控制器方法名$route不在当前用户拥有的所有权限中(也就是$arry中),则重定向到无权访问的页面
} else {
return redirect('noaccess');
}
}
}
3.创建无权访问的页面
- 创建无权访问的路由
Route::get('noaccess','Admin\LoginController@noaccess'); - 创建无权访问的控制器方法
//没有权限的跳转页面
public function noaccess()
{
return view('errors.noaccess');
}
- 创建无权访问的模板
位置:resources/views/noaccess.blade.php
<div class="content">
<div class="title m-b-md">
没有访问权限
</div>
</div>
4.注册中间件
位置:app/Http/Kernel.php
protected $routeMiddleware = [
'hasRole' => \App\Http\Middleware\HasRole::class,
];
5.使用中间件
//在需要访问的路由组中挂中间件'middleware' => ['hasRole']
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['hasRole','isLogin']], function () {});
浙公网安备 33010602011771号