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使用中间件授予路由组权限失败