我的中间件有问题。 当我以管理员身份登录时,它工作正常并重定向到与操作员相同的/Admin/home
(我有 2 个用户,管理员和操作员(。问题是当我点击网址时:/Operator/home
作为管理员角色,它可以访问它。这就是问题所在。
我已经创建了一个新的中间件CheckMiddleware
,并将数组$routeMiddleware中的内核注册为检查中间件:
public function handle($request, Closure $next)
{
$user = $request->user();
if ($user) {
if ($user->isAdmin()) {
return $next($request);
}elseif($user->isOperator()){
return $next($request);
}
}
return dd('Forbidden page. you have to login as admin/operator');
}
在路线上:
Route::group(['prefix'=>'Admin' ,'middleware' => 'checkMiddleware'], function() {
Route::get('/home', 'HomeController@index')->name('homeAdmin');
});
Route::group(['prefix'=>'Operator' ,'middleware' => 'checkMiddleware'], function() {
Route::get('/home', 'HomeController@index')->name('homeAdmin');
});
Auth::routes();
在用户模型中:
public function isAdmin(){
if ($this->role_id === 1) {
return true;
}
return false;
}
public function isOperator(){
if ($this->role_id === 2) {
return true;
}
return false;
}
我想要的是,管理员无法访问操作员,操作员无法访问管理员。如果不清楚,请告诉我您想查看哪个文件。
问题是,如果user
admin
则接受请求,user
operator
仍然接受请求。下面的代码
if ($user->isAdmin()) {
return $next($request);
}elseif($user->isOperator()){
return $next($request);
}
对于简单的解决方案,只需为管理员和操作员创建两个中间件。然后将admin
中间件应用于路由(组(需要admin
角色,operator
中间件应用于路由(组(需要operator
角色。
如果您有某些路由允许admin
和operator
角色访问权限,只需将两者添加到该路由即可。
更新如果要使用 1 个中间件,请执行以下操作:
if ($user->isAdmin() && $request->route()->getPrefix() == 'admin') {
return $next($request);
}
if ($user->isOperator() && $request->route()->getPrefix() == 'operator') {
return $next($request);
}
return abort(401) // OR SOME ROUTE YOU WANT