保护管理员和用户路线laravel 5

时间:2015-08-16 09:40:06

标签: php routing laravel-5 middleware

我有管理员和用户的共同登录信息。但我在我的表中创建了一个角色,如下所示:

user_id      role_id
1              2
2              1
3              2

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

例如,我不希望用户获得任何适用于管理员的访问权限。目前,我可以检查用户是管理员还是用户if (Auth::user()->hasRole('admin'))if (Auth::user()->hasRole('user'))

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

1 个答案:

答案 0 :(得分:0)

创建两个中间件,管理员可以这样做:

<?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 middlware

routes.php中你可以这样做:

Route::group(['middleware' => 'checkAdmin'], function () {

    Route::get('admin/profile', function () {
        // Uses CheckAdmin Middleware
    });
});