【问题标题】:Laravel get user with PermissionsLaravel 获取具有权限的用户
【发布时间】:2016-06-02 05:30:01
【问题描述】:

我为我的用户设置了权限/角色。 这是通过6张桌子

  • 用户
  • 角色
  • 权限
  • role_user
  • permission_role
  • permission_user

而用户类有以下功能:

public function permissions(){
    return $this->belongsToMany(Permission::class);
}

public function roles(){
    return $this->belongsToMany(Role::class);
}

权限类有以下功能

public function roles() {
    return $this->belongsToMany(Role::class);
}

public function users() {
    return $this->hasMany(User::class);
}

最后Role具有以下功能:

public function permissions() {
    return $this->belongsToMany(Permission::class);
}
public function users() {
    return $this->belongsToMany(User::class);
}

所以现在我想请求一个具有列出的所有权限和所有角色的用户,所以我创建了:

$u = \Auth::user();
return User::with('roles.permissions')->with('permissions')->find($u->id);

返回类似的东西

{
    id: 53,
    name: "name",
    username: "username",
    avatar: "",
    email: "email",
    created_at: "2016-02-20 14:36:54",
    updated_at: "2016-02-20 14:36:54",
    roles: [{
        id: 1,
        name: "edit_forum",
        label: "Edit Forum",
        created_at: "2016-02-20 12:33:50",
        updated_at: "2016-02-20 12:33:50",
        permissions: [{
            id: 2,
            name: "Testing stuff",
            label: null,
            created_at: "2016-02-20 16:50:02",
            updated_at: "2016-02-20 16:50:02"
        }]
    }],
    permissions: [{
        id: 1,
        name: "Testing",
        label: null,
        created_at: "2016-02-20 16:50:02",
        updated_at: "2016-02-20 16:50:02"
    }]
}

如您所见,它的角色的权限在一个单独的数组中,现在我正在尝试 2 件事,但我似乎无法弄清楚如何制作这些功能:

首先: 获取用户自身的所有权限以及1个数组中的权限。

第二: 通过单个作用域/函数获取它

【问题讨论】:

  • 你有什么问题?
  • 我要归档的两件事

标签: php laravel permissions laravel-5.2


【解决方案1】:

Permission 类具有以下功能:

public function users() {
    return $this->hasMany(User::class);
}

这应该是many-to-manyrelationship 而不是one-to-many,所以你可以这样编写方法:

public function users() {
    return $this->belongsToMany(User::class);
}

因此,permission_user 数据透视表将用于维护关系,对于您的代码,您可以执行以下操作:

$u = \Auth::user(); // get the authenticated User
return $u->load('roles.permissions'); // Load the roles and permissions of loaded User

因此,无需为单独加载权限和角色进行更多查询。你可以使用这样的东西:

foreach($u->roles as $role) {

    // $role->title; // for example

    foreach($role->permissions as $permission) {

        // $permission->title; // for example
    }
}

请记住,$u->roles 将返回一个集合,其中每个 $role(当您调用 $role->permissions 时)permissions 也是一个集合。


注意:您可以关注我的this article 以获得更多想法。

【讨论】:

  • 嗨,谢谢你的回答。但是您将如何获取用户的特定权限?所以他们不会通过角色获得的那些?
  • Auth::user()->permissions 将通过permission_user 数据透视表为您提供经过身份验证的用户权限。
  • 我知道,这就是执行 ->with() commands 时输出中已经包含的内容,但我想要 1 个具有 所有 权限的列表
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2015-07-13
  • 2023-03-21
  • 2020-12-27
  • 2019-05-03
  • 2021-05-29
相关资源
最近更新 更多