Laravel为用户提供权限

时间:2016-02-20 16:12:26

标签: php laravel permissions laravel-5.2

我为我的用户设置了权限/角色。 这是通过6个表

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

用户类具有以下功能:

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

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

Permission 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"
    }]
}

所以你可以看到,它的角色权限是分开的,现在我尝试了两件事,但我似乎无法弄清楚如何制作这些功能:

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

第二: 通过单个范围/功能

获取此信息

1 个答案:

答案 0 :(得分:2)

Permission类具有以下功能:

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

这应该是many-to-many关系,而不是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以获得更多想法。