пытаюсь сделать авторизацию на ларавел с двумя ролями. Не понимаю как проверить права пользователя. Сделал стандартные три таблицы, user, roles и role_user, две модели Role и User, связи в моделях
public function role()
{
return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
}
Если я правильно понял, проверять права я буду в посреднике, и везде по этой теме пишут что права можено получить строчкой
$user->role->id
но это не работает, потому что по $user->role я получаю большой массив с кучей ненужной инфы, до которой нужно добираться через индексы массива. И даже если я делаю
$role = $user->role->toArray();
echo "<pre>";
print_r($role);
то почему то получаю два одинаковых массива
Array
(
[0] => Array
(
[id] => 1
[name] => admin
[pivot] => Array
(
[user_id] => 1
[role_id] => 1
)
)
[1] => Array
(
[id] => 1
[name] => admin
[pivot] => Array
(
[user_id] => 1
[role_id] => 1
)
)
)
Как мне это все красиво сделать? Laravel Framework 5.7.25
https://stackoverflow.com/questions/24555697/check-if-belongstomany-relation-exists-laravel
Просто проверьте существует ли такая роль у текушего юзера:
$client = Client::find(1);
$exists = $client->products->contains($product_id);
(Смысл тот же)))
Несколько одинаковых ролей у пользователя ты получаешь по той причине, что несколько раз вызвал метод $user->roles()->attach($role)
. Есть метод связи sync($roleId)
or syncWithoutDetaching()
(доки по связям в помощь). А чтобы разрешения проверять (permissions
или abilities
), надо иметь модель, связанную с ролью m-2-m связью. Роль - это просто группировка разрешений со всеми вытекающими
Виртуальный выделенный сервер (VDS) становится отличным выбором
я создал таблицы users, post и psusers - пользователь, post - почты, ps - хранятся id users и post