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

Posted

技术标签:

【中文标题】Laravel 5.2 Entrust:如果他手动添加受限URL,则重定向用户【英文标题】:Laravel 5.2 Entrust: redirect user if he manually adds restricted URL 【发布时间】:2016-12-28 15:39:29 【问题描述】:

使用 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 手动删除员工并尝试访问超级管理员仪表板,则 Entrust 会抛出 403 错误,但我想将他重定向到他的仪表板,并显示“你不是授权”。

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

【问题讨论】:

【参考方案1】:

您的 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>

【讨论】:

不!我不是要求获取 403 错误页面。我想要的是如果他手动更改 URL,然后如何重定向回他的仪表板,而不是显示死 403 页面。希望我的问题很清楚。 您可以覆盖 vendor/zizaco/entrust/src/Entrust/Middleware/EntrustRole.php 中的句柄方法

以上是关于Laravel 5.2 Entrust:如果他手动添加受限URL,则重定向用户的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 laravel 5.2 zizaco 委托:迁移类名验证?

Laravel 5.5 Entrust使用中间件授予路由组权限失败

在laravel 5.2中,Laravel手动登录始终不匹配

Laravel Entrust 权限管理扩展包的踩坑记录

如何在 Laravel 5.2 中手动发送密码重置请求?

在 Vue JS 和 Laravel 5.1 + Entrust 中检查特定角色的权限