Laravel授权:重定向而不是异常?

时间:2017-11-29 17:59:01

标签: php laravel-5

我想为已登录且具有特定类型(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.

enter image description here

如果用户不是home,我宁愿将用户重定向到leader,而不是抛出错误消息。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

只需重新发布answer given in laracasts

您可以在Exceptions \ Handler.php文件中执行此操作

render方法会覆盖AuthorizationException类,如果拒绝用户,authorize()将抛出该类。

在渲染方法中你可以做到

if($exception instanceof AuthorizationException) {
//your code
}