Laravel 5.2 Entrust:如果用户手动添加受限制的URL,则重定向用户

时间:2016-08-22 07:27:36

标签: laravel-5.2 user-roles php-5.6 entrust

借助Entrust,我实现了如何在登录后通过在Authcontroller.php中添加此方法将用户重定向到自己的信息中心

protected function authenticated()
{

    if(\Auth::user()->hasRole(['super_admin',]) ) {
        return redirect('/dashboard');
    } else if(\Auth::user()->hasRole(['staff_admin']) ) {
        return redirect('/staff/dashboard');
    } else if(\Auth::user()->hasRole(['subadmin_admin']) ) {
        return redirect('/subadmin/dashboard');
    }
}

我现在面临的挑战是,例如。如果员工已登录并重定向到他的仪表板

domain.com/staff/dashboard

但如果他从url手动删除人员并尝试访问Super-Admin Dashboard ,那么Entrust会抛出403错误,但我想将他重定向到他的信息中心,并显示“你不是授权”。

我尝试在RedirectIfAuthenticated中间件中实现相同的代码,但是因为hasRole在Null上调用它会产生错误。

1 个答案:

答案 0 :(得分:0)

您的DashboardController添加构造函数。

示例代码

class UserController extends Controller
{
        public function __construct()
        {
            $this->middleware(['role:super_admin']);
        }

        public function index()
        {
        return view('dashboard');
        }
}

然后,错误文件夹添加403.blade.php,如下所示:

<!DOCTYPE html>
<html>
    <head>
        <title>Be right back.</title>

        <link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">

        <style>
            html, body {
                height: 100%;
            }

            body {
                margin: 0;
                padding: 0;
                width: 100%;
                color: #B0BEC5;
                display: table;
                font-weight: 100;
                font-family: 'Lato', sans-serif;
            }

            .container {
                text-align: center;
                display: table-cell;
                vertical-align: middle;
            }

            .content {
                text-align: center;
                display: inline-block;
            }

            .title {
                font-size: 72px;
                margin-bottom: 40px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="content">
                <div class="title">You are not authorized.</div>
            </div>
        </div>
    </body>
</html>