保护admin和user路由


protecting admin and user routes laravel 5

我有一个共同的登录管理员和用户。但是我已经在我的表中创建了一个角色,看起来像:

user_id      role_id
1              2
2              1
3              2

其中role_id 1表示管理员,role_id 2表示用户。我还可以为不同的用户附加角色。现在我想要保护所有的admin路由和user路由。

例如,我不希望user获得任何应该给admin的访问权限。现在我可以查看用户是admin还是像if (Auth::user()->hasRole('admin'))if (Auth::user()->hasRole('user'))这样的用户。

在这种情况下,我应该如何将我的用户路由与管理路由分开?我应该制作自己的中间件并实现吗?如果是,如何正确实现?

创建两个中间件,对于admin您可以这样做:

<?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',
];

你可以在routes.php文件或Controller的构造函数中使用CheckAdmin中间件

routes.php你可以做:

Route::group(['middleware' => 'checkAdmin'], function () {
    Route::get('admin/profile', function () {
        // Uses CheckAdmin Middleware
    });
});