首页 > 解决方案 > 我们如何在中间件中添加多个检查以在 Laravel 中执行某些检查

问题描述

我最近开始学习 Laravel,我正在开发一个 CRUD 博客,其中用户分为 3 个角色。所有者、管理员和作者。因此,我希望所有者成为可以在“管理员”帖子中创建或删除用户的最高权限。第二个授权应该是管理员,他可以管理、确认或删除博客中的帖子,并且几乎可以做所有者可以做的所有事情,但不能禁止或降级所有者。

所以我创建了一个用户页面,其中显示所有注册用户的列表说:localhost:8000/users 现在我只希望所有者和管理员访问此页面,而不是作者。因此,为了实现这一点,我在 User 模型中创建了两个函数来检查用户是否是所有者(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 (||) 时,它工作正常,但只检查管理员或所有者。我怎样才能使它适用于两者?难道我做错了什么?我尝试了许多不同的方法,但没有一个对我有用

标签: phplaravel

解决方案


只需更改条件:

public function handle ($request, Closure $next) {
    if (auth()->user()->isOwner() || auth()->user()->isAdmin()) {
        return $next($request);
    } else {
        session()->flash('error', 'You are not authenticated to perform this action');
        return redirect('home');        
    }
}

但是我们使用策略和门,就像博客用户可以删除博客,管理员可以删除该博客一样,我们也可以使用中间件,如果您想针对特定模块或表执行此操作,请使用策略和门,在帮助下对于策略,您可以管理具有不同不同条件的所有 CRUD 操作。


推荐阅读