#php #laravel
#php #laravel
Вопрос:
Я создал отношение «многие ко многим» между ролевой и пользовательской моделями. У них есть сводная таблица с именем role_user
. Оно состоит из id
, user_id
и role_id
.
Моя пользовательская модель имеет это отношение:
public function roles(){
return $this->belongsToMany('AppRole');
}
и эта функция:
public function hasRole($role){
return null !== $this->roles()->where("name", $role)->first();
}
Я пытаюсь создать свой класс PostPolicy, перед функцией проверяя, является ли пользователь администратором или суперадминистратором
public function before(User $user){
if($user->hasRole('Admin') || $user->hasRole('Super Admin') ){
return true ;
}
}
И функция возвращается с ответом false, однако я вошел в систему с пользователем, у которого есть роль администратора.
Таблица моих ролей:
id
name
description
created_at
updated_at
Пользователи:
id
name
email
email_verified_at
password
remember_token
created_at
updated_at
Комментарии:
1. Это случайно не пространство? Что касается именования, я бы написал любые роли в нижнем регистре.
Ответ №1:
Когда я пишу ваш код и прикрепляю роли, он начинает работать:
$user->roles()->attach($roleName);
Я также добавляю return false
под if
в PostPolicy@before
методе) — вот рабочий пример
Ответ №2:
У вас также есть функция users, установленная в модели ролей?
Я считаю, что у вас должны быть оба, чтобы «многие ко многим» корректно работали в Laravel.
Комментарии:
1. У меня есть функция для модели ролей