我正在使用laravel 5.2。我在用户登录时遇到问题,如果他们知道网址,他们可以打开 admin 页面。以下是我的导航栏菜单:
@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);
}
答案 0 :(得分: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并添加中间件&#39; isAdmin
&#39;到内核类$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');