Я пытаюсь получить все разрешения, которые есть у пользователя.
Модель разрешений
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






Вам нужно написать что-то подобное в вашем контроллере.
$users = User::with(['roles', 'roles.permissions', 'permissions'])->get();
Это вернет все разрешения от roles и permissions.
Вид:
foreach($user->roles as $role) {
foreach($role->permissions as $permission){
{{ $permission->name }}
}
}
чтобы получить все разрешения, которые есть у пользователя, вы можете просто запустить
$users = User::with(['roles.permissions'])->get();
Чтобы затем использовать разрешения, вам нужно перебрать роли следующим образом:
foreach($user->roles as $role) {
var_dump($role->permission);
}
Работает нормально
$users = User::with(['roles.permissions'])->get()->find(2);
Выход
{
"status": false,
"response": {
"errors": {
"id": 2,
"vender_id": 1,
"name": "zubair",
"email": "[email protected]",
"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
Допустим, ваша иерархия UserhasManyRole и RolehasManyPermission.
Тогда ваши отношения должны быть установлены так в моделях.
public function roles() {
return $this->hasMany('App\Models\Role`);
}
public function permissions() {
return $this->hasMany('App\Models\Permission`);
}
User::find(1)->load('roles.permissions')
Вы можете использовать "with("permission")" в отношениях между пользователем и ролями:
public function roles()
{
return $this->belongsToMany('App\Models\Role')->with("permissions");
}
Вам нужно пройти
foreachроли иforeachразрешение роли