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

对于一对多关系,如何从角色数组中检查角色并在存在任何角色时返回true?

颜阳炎
2023-03-14

我能够成功地检查用户是否具有单个角色。现在我需要检查的是,如果用户是管理员或员工,并且如果上述角色匹配,则返回true或false。我无法这样做,因为我使用了用户角色之间的一对多关系,因此无法从角色数组中检查角色。

  • 数据库结构
Users
---------------
* id
* name
* email
* password
* role_id
* created_at

Roles
---------------
 * id
 * name
 * slug
 * created_at
  • 应用/模型/用户
public function role() 
{
    return $this->belongsTo(Role::class);
}

public function hasRole(string $role) 
{
    if ($this->role()->where('slug', $role)->exists()) {
        return true;
    }
    return false;
}

public function hasAnyRoles(array $roles) 
{
    if ($this->role()->whereIn('slug', $roles)->exists()) {
        return true;
    }
    return false;
}
public function users() 
{
    return $this->hasMany(User::class);
}
  • App/Http/Responses/LoginResponse
public function toResponse($request)
{
    if(Auth::user()->hasAnyRoles(['administrator', 'employee'])) {
        return redirect()->route('backend.dashboard');
    }

    return redirect()->route('frontend.dashboard');
}

共有2个答案

寇坚成
2023-03-14

因为这是一个一对多的反向关系,你不能这样做。相反,你可以用这个。

public function role() 
{
    return $this->belongsTo(Role::class);
}

public function hasRole(string $role) 
{
    return $this->role()->where('slug', $role)->exists();
}

public function hasAnyRoles(array $roles) 
{
    if (is_array($roles)) {
        foreach ($roles as $role) {
            if ($this->hasRole($role)) {
                return true;
            }
        }
    }
    
    return false;
}
岳志义
2023-03-14

您可以使用_array中的查看所分配角色的slug是否在您要传递的数组中:

public function hasAnyRoles(array $roles) 
{
    if ($this->role) {
        return in_array($this->role->slug, $roles);
    }

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

  • 本文向大家介绍ansible 角色依存关系,包括了ansible 角色依存关系的使用技巧和注意事项,需要的朋友参考一下 示例 角色还使您可以通过创建meta/main.yml带有dependencies块的文件来将其他角色定义为依赖项: 也可以将值传递给依赖角色中的参数/变量: 甚至有条件地执行依赖角色: 依赖角色始终在依赖它们的角色之前执行。而且,它们仅执行一次。如果两个角色声明与其依赖关系相同

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

  • 问题内容: 我有两个AWS账户-假设A和B. 在帐户B中,我定义了一个角色,该角色允许从帐户A中访问另一个角​​色。我们称其为角色B 在帐户A中,我定义了一个角色,该角色允许root用户承担角色。让我们称之为角色A 角色A附加了以下策略 作为帐户A的用户,我担任角色A。现在使用此临时凭据,我想承担角色B并访问帐户B拥有的资源。我有以下代码 该代码适用于我从客户端获得的一组角色,但不适用于我在我有权

  • 接口说明 保存角色 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /permissions/api/team/role/v1.0.0/save 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN roleName string formData

  • 接口说明 保存角色 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 POST /permissions/api/team/role/v1.0.0/s