当前位置: 首页 > 知识库问答 >
问题:

Laravel 5-查询模型时使用“isAdmin”角色检查方法

谷泳
2023-03-14

我已经实现了一个基本的角色系统,它使用一个表“role\u user”。

在我的用户模型上,我有几种方法可以检查角色,其中之一是:

public function isStaff()
{
    foreach ($this->roles()->get() as $role)
    {
        if ($role->id == 3)
        {
            return true;
        }
    }

    return false;
}

当我查询用户时,如何使用此方法?

这里的查询:

return User::where('name', 'like', "%".$request->name."%")
    ->orWhere('email', 'like', "%".$request->name."%")
    ->whereDoesntHave('Teams', function ($query) use($teamId) {
        $query->whereId($teamId);
    })
    ->with('teams')
    ->get();

目前返回所有用户,但我只希望返回角色为3的用户

共有3个答案

史涵育
2023-03-14

您可以在用户模型中设置一个名为staff的范围,然后使用该范围缩小结果范围:

public function scopeStaff($query, $roll_id = 3) 
{
    return $query->where('role_id', '=', $roll_id)
}

因此,在检查(使用模型)员工角色时,您可以改进实现该功能的功能:

public function isStaff($role_id = 3)
{
    return $this->role_id = $role_id ? $this : false;
}

因此,当使用查询生成器时,您可以使用第一种方法将结果缩小到具有指定id的结果,因为您可以看到默认值为3,但将更改为您给定的任何值:

$staff_users = User::staff()->get();

然后,另一个用于验证匹配的用户模型是否为人员:

$user = User::find(1);
$is_staff = $user->isStaff(); //false or returns the same model

希望这能有所帮助

潘刚洁
2023-03-14

最好是做条件测试

return User::where('name', 'like', "%".$request->name."%")
->orWhere('email', 'like', "%".$request->name."%")
->whereDoesntHave('Teams', function ($query) use($teamId) {
    $query->whereId($teamId);
})
->whereHas('roles', function($q) use ($role_id){
    $q->where('id',$role_id);
})
->with('teams')
->get();

或者,您也可以基于param reurn结果为上述查询创建一个方法

傅高逸
2023-03-14

您可以使用范围与Laravel代替多种方法来检查不同的方法。

public function scopeRole($query, $flag)
{
        return $query->where('role', $flag);
}

然后

$users= User::role(3)->get();

查看有关创建动态范围的参考教程

 类似资料:
  • 问题内容: 我想使用Spring Security JSP标签库根据角色有条件地显示一些内容。但是在Spring Security 3.1.x中,仅检查一个角色。 我可以使用,但 ifAllGranted 已弃用。 有什么帮助吗? 问题答案: 春季安全性中有一个特殊的安全性表达: hasAnyRole(角色列表) -如果已授予用户指定的任何角色(以逗号分隔的字符串 列表形式) ,则为true。 我

  • 我目前正在建立一个不和谐验证机器人,这个机器人的一个功能,如果检查你是否有一个角色从每一个需要的类别,然后在最后产生你的角色的总结。目前,我有一个工作解决方案,它的功能完全符合我的要求,但它使用了一个很大的if堆栈,我对js很陌生,但被告知尽可能不要使用大的if/if else if堆栈。我已经研究了switch的案例,但不知道如何应用这些案例,所以我想知道是否有一种更优化的方法来实现我所需要的。

  • 我是LDAP的新手,我尝试过在OpenLDAP上实现RBAC。我创建了一些用户(inetOrganizationPerson)并将它们放在组中(groupOfNames)。接下来,我创建了一些角色(organizationalRole)并将它们与用户组关联(RoleIncuspant),而不是直接将它们与用户关联。 1)/usr/local/bin/ldapsearch-x-b'ou=groups

  • 我一直在努力在Spring MVC应用程序中集成Spring Security和FreeMarker模板。我使用一个非常简单的登录表单将用户名和密码提交给 /j_spring_security_check.我能够在Java层登录和检索用户的角色。但是当我尝试在FreeMarker中检查角色时,我没有运气。我在FTL文件顶部添加了以下内容: 并使用以下内容检查角色: <代码><代码> 我收到以下错误

  • 查询集表示从数据库中获取的对象集合 查询集可以含有零个、一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句 接下来主要讨论如下知识点 查询集 字段查询:比较运算符,F对象,Q对象 1. 查询集 在管理器上调用过滤器方法会返回查询集 查询集经过过滤器筛选后返回新的查询集,因此可以写成链式过滤 惰性执行:创建查询集不会

  • 我正在做一个giverole命令,就像!giverole{member}{role},但是我怎么知道bot最高角色是否高于提到的角色。我还没试过什么,因为我卡住了,请帮帮我。 我正在使用discord.js v12