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

protecting admin and user routes laravel 5

我有一个管理员和用户的通用登录名。但是我在我的 table 中创建了一个角色,它看起来像:

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')) 这样的用户。

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

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

<?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 文件或控制器的构造函数中使用您的 CheckAdmin 中间件

routes.php 你可以做:

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

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