Получить список разрешений пользователей - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь получить все разрешения, которые есть у пользователя ..

Модель разрешения

public function roles()
{
    return $this->belongsToMany("App\Models\Role");
}

Ролевая модель

public function users()
{
    return $this->belongsToMany('App\Models\User');
}

public function permissions()
{
    return $this->belongsToMany("App\Models\Permission");
}

Модель пользователя

public function roles()
{
    return $this->belongsToMany('App\Models\Role', 'role_user', 'user_id', 'role_id');
}

Я хочу все разрешения, которые имеет пользователь.

Может ли пользователь иметь разрешение viva user Permissions

Ответы [ 5 ]

2 голосов
/ 17 июня 2019

Допустим, ваша иерархия: User hasMany Role и Role hasMany Permission.

Тогда ваши отношения должны быть установлены так в моделях.

Модель пользователя

public function roles() {
   return $this->hasMany('App\Models\Role`);
}

Ролевая модель

public function permissions() {
   return $this->hasMany('App\Models\Permission`);
}

Чтобы получить разрешения для пользователя

User::find(1)->load('roles.permissions')
2 голосов
/ 17 июня 2019

Вам нужно написать что-то подобное в вашем контроллере.

$users = User::with(['roles', 'roles.permissions', 'permissions'])->get();

Это вернет все разрешения от roles и permissions.

Вид:

foreach($user->roles as $role) {
       foreach($role->permissions as $permission){
          {{ $permission->name }}
       }
    }
0 голосов
/ 18 июня 2019

Вы можете использовать «с (« разрешение »)» в отношениях между пользователем и ролями: public function roles() { return $this->belongsToMany('App\Models\Role')->with("permissions"); }

0 голосов
/ 17 июня 2019

Работает отлично

$ users = User :: with (['role.permissions']) -> get () -> find (2);

OutPut

 {
        "status": false,
        "response": {
            "errors": {
                "id": 2,
                "vender_id": 1,
                "name": "zubair",
                "email": "ts@gmail.com",
                "email_verified_at": null,
                "created_at": "2019-06-17 08:11:25",
                "updated_at": "2019-06-17 08:11:25",
                "roles": [
                    {
                        "id": 1,
                        "vender_id": 1,
                        "name": "product-manager",
                        "display_name": "Product Manager",
                        "description": "Product Manager",
                        "created_at": "2019-06-17 08:11:56",
                        "updated_at": "2019-06-17 08:11:56",
                        "pivot": {
                            "user_id": 2,
                            "role_id": 1
                        },
                        "permissions": [
                            {
                                "id": 1,
                                "name": "add-role",
                                "display_name": "Add Role",
                                "description": "Add Role",
                                "created_at": "2019-06-17 08:20:09",
                                "updated_at": "2019-06-17 08:20:09",
                                "pivot": {
                                    "role_id": 1,
                                    "permission_id": 1
                                }
                            }
                        ]
                    }
                ]
            }
        }
    }

Но при попытке доступа к разрешениям свойство [разрешения] не существует в этом экземпляре коллекции.в Collection.php

0 голосов
/ 17 июня 2019

, чтобы получить все разрешения, которые есть у пользователя, вы можете просто запустить

$users = User::with(['roles.permissions'])->get();

Чтобы затем использовать разрешения, вам нужно перебрать роли, подобные этой:

foreach($user->roles as $role) {
   var_dump($role->permission);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...