【发布时间】:2020-04-03 17:56:05
【问题描述】:
我最近开始学习 Laravel,我正在开发一个 CRUD 博客,其中用户分为 3 个角色。所有者、管理员和作者。因此,我希望所有者成为可以在“管理员”帖子中创建或删除用户的最高权限。 第二个身份验证者应该是管理员,他可以管理、确认或删除博客中的帖子,并且几乎可以做所有者可以做的所有事情,但不能禁止或降级所有者。
所以我创建了一个用户页面,显示所有注册用户的列表:localhost:8000/users
现在我只希望所有者和管理员访问此页面,而不是作者。所以为了实现这一点,我在用户模型中创建了两个函数来检查用户是否是所有者(isOwner())和用户是否是管理员(isAdmin()),然后制作了一个中间件。现在在中间件中,我想添加规则,如果用户是所有者或管理员,让他们访问用户页面,否则将他们返回主页并闪烁错误消息。
我的中间件代码如下
public function handle ($request, Closure $next) {
if (!auth()->user()->isOwner() || !auth()->user()->isAdmin()) {
session()->flash('error', 'You are not authenticated to perform this action');
return redirect('home');
}
return $next($request);
}
但这并不是我想要的。这只是现在允许任何人访问用户页面。当我从 if 语句中删除 OR (||) 时,它工作正常,但只检查管理员或所有者。我怎样才能使它适用于两者?难道我做错了什么?我尝试了许多不同的方法,但没有一个对我有用
【问题讨论】: