我想为已登录且具有特定类型(leader
)的用户提供对控制器处理的所有页面的访问权限。在docs中,我发现我可以在构造函数中使用$this->middleware('Auth')
,这将重定向尚未登录的所有用户。但是我没有找到如何执行此操作而不是检查用户是否已登录,而是检查用户是否被gate允许。
在AuthServiceProvider
中,我创建了以下Gate
Gate::define('isLeader', function ($user) {
return $user->isLeader();
});
在控制器内部,我有以下构造函数
public function __construct()
{
$this->middleware('auth');
$this->middleware('can:isLeader');
}
对于leader
这个有效的用户。但对于非leader
的用户,我在通过此控制器访问页面时收到错误消息This action is unauthorized.
:
如果用户不是home
,我宁愿将用户重定向到leader
,而不是抛出错误消息。我怎么能做到这一点?
答案 0 :(得分:0)
只需重新发布answer given in laracasts。
您可以在Exceptions \ Handler.php文件中执行此操作
render方法会覆盖AuthorizationException类,如果拒绝用户,authorize()将抛出该类。
在渲染方法中你可以做到
if($exception instanceof AuthorizationException) {
//your code
}