繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM