Мои отношения «многие ко многим» не возвращают необходимые роли пользователей

#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. У меня есть функция для модели ролей