[英]protecting admin and user routes laravel 5
我具有管理员和用户的通用登录名。 但是我在表中创建了一个角色,如下所示:
user_id role_id
1 2
2 1
3 2
其中role_id 1
代表管理员,而role_id 2
代表用户。 我也可以将角色附加到其他用户。 现在我想要的是,我想保护所有管理路由和用户路由。
例如,我不希望用户获得任何针对管理员的访问权限。 现在,我可以检查用户是admin还是类似if (Auth::user()->hasRole('admin'))
或if (Auth::user()->hasRole('user'))
。
在这种情况下,应如何将用户路由和管理路由分开? 我应该自己制作中间件并实施吗? 如果是这样,如何正确实施?
创建两个中间件,对于管理员,您可以执行以下操作:
<?php namespace App\Http\Middleware;
use Auth;
use Illuminate\Contracts\Routing\Middleware;
class CheckAdmin implements Middleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->hasRole('admin'))
{
return $next($request);
}
throw new \Exception("Unauthorized");
}
}
然后在App\\Http\\Kernel
启用此中间件
protected $routeMiddleware = [
'auth' = 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'checkAdmin' => 'App\Http\Middleware\CheckAdmin',
];
您可以在route.php文件或Controller的构造函数中使用CheckAdmin中间件
在routes.php
您可以执行以下操作:
Route::group(['middleware' => 'checkAdmin'], function () {
Route::get('admin/profile', function () {
// Uses CheckAdmin Middleware
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.