如何通过Laravel 5.2中的登录角色保护路由?

问题描述 投票:0回答:1

我正在使用laravel 5.2。 我在用户登录时遇到问题,如果他们知道URL,则他们可以打开管理页面。 这是我的导航栏菜单:

@if(Session::get('Mem_Username') == 'Guest')
<li>
<a href="{{ url ('Client') }}"><i class="fa fa-building fa-fw"></i> Client List</a>
</li>
@endif
@if(Session::get('Mem_Role') == '1')
<li>
<a href="{{ url ('Lead') }}"><i class="fa fa-th-list fa-fw"></i> Leads</a>
</li>
<li>
<a href="{{ url ('Client') }}"><i class="fa fa-building fa-fw"></i> Client List</a>
</li>
@elseif(Session::get('Mem_Role') == '2')
<li>
<a href="{{ url ('Lead') }}"><i class="fa fa-th-list fa-fw"></i> Leads</a>
</li>
@endif

我已经把它放在每个控制器中

public function __construct()
{
    $this->middleware('auth');
}

顺便说一句,我正在使用Session将Authenticate.php文件更改为如下所示:

public function handle($request, Closure $next, $guard = null)
    {
        if(Session::has('Mem_Username')){

        }
        else{
            return redirect()->guest('');
        }

        return $next($request);
    }
php laravel laravel-5.2 laravel-middleware
1个回答
1
投票
php artisan make :middleware AdminMiddleware

它将在下面创建一个新的中间件: App/Http/Middleware打开中间件,放置代码:

public function handle($request, Closure $next)
{
    if(!auth->user()->isAdmin()){
        abort(404);
    }
    return next($request);
}

在用户模型下,请确保您具有一个isAdmin()方法来检查当前用户是否为admin。

注册中间件

现在,我们已经创建了中间件,我们需要让应用程序知道中间件的存在。 如果要在每个请求上运行中间件,请转到app / Http / kernel.php并将中间件' isAdmin '添加到Kernel类$middleware property

protected $middleware = [
    ...
    \App\Http\Middleware\AdminMiddleware::class
];

如果您希望中间件在某些路由上触发,我们可以命名中间件并将其用作将其添加到某些路由的参考机制。 要命名中间件,尽管仍在app/Http/kernel.php ,但将键属性添加到$routeMiddleware数组中。 数组键是中间件的名称,而值应该是中间件的isAdmin

protected $routeMiddleware = [
    ...
    'isAdmin' => \App\Http\Middleware\AdminMiddleware::class,
    ...
];

然后,您可以使用此中间件保护您的路由。

Route:get('someurl', 'Controller')->middleware('isAdmin');
© www.soinside.com 2019 - 2024. All rights reserved.