我想锁定 AccountsController ,以便所有用户都希望用户为管理员用户 ..
例如:
Auth::user() -> roll != 'Admin'
然后关闭 AccountsController ..
AccountsController构造代码:
public function __construct()
{
$this->middleware('auth');
}
答案 0 :(得分:2)
Middleware是一个完全有效的解决方案,但我已针对此类情况切换到Gates。门使用起来更方便。我使用角色和权限以及hasRole
方法来管理访问级别,但如果您的系统很简单,您可以轻松地在isAdmin
模型上使用User
方法检查标记在数据库中。
创建您的客户中间件。
<强> AuthenticateAdmin.php 强>
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
class AuthenticateAdmin {
protected $auth;
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
if ($this->auth->user()->hasRole('admin'))
{
return $next($request);
}
}
}
将其添加到您的内核。
<强> Kernel.php 强>
protected $routeMiddleware = [
'auth' => Middleware\Authenticate::class,
'auth.admin' => Middleware\AuthenticateAdmin::class,
];
然后您可以在控制器中使用中间件。
public function __construct()
{
$this->middleware('auth.admin');
}
使用Gate,您可以添加在AuthServiceProvider中定义策略
<强> AuthServiceProvider.php 强>
public function boot(GateContract $gate)
{
parent::registerPolicies($gate);
$gate->define('user-admin', function($user){
return $user->hasRole('admin');
});
}
然后将其添加到您的控制器或您需要的地方。
<强> Controller.php这样强>
public function show($slug)
{
if (Gate::allows('user-admin')){
return $yes;
}
return $no;
}