Laravel Авторизация с ролями многие ко многим

109
29 сентября 2019, 00:50

пытаюсь сделать авторизацию на ларавел с двумя ролями. Не понимаю как проверить права пользователя. Сделал стандартные три таблицы, 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

Answer 1

https://stackoverflow.com/questions/24555697/check-if-belongstomany-relation-exists-laravel

Просто проверьте существует ли такая роль у текушего юзера:

$client = Client::find(1);
$exists = $client->products->contains($product_id);

(Смысл тот же)))

Answer 2

Несколько одинаковых ролей у пользователя ты получаешь по той причине, что несколько раз вызвал метод $user->roles()->attach($role). Есть метод связи sync($roleId) or syncWithoutDetaching() (доки по связям в помощь). А чтобы разрешения проверять (permissions или abilities), надо иметь модель, связанную с ролью m-2-m связью. Роль - это просто группировка разрешений со всеми вытекающими

READ ALSO
Ошибка в .htaccess

Ошибка в .htaccess

Выдает 500 ошибкуВ чем ошибка? Сам тут полный 0

140
Как на php и mysql избрранное вещей сделать? [закрыт]

Как на php и mysql избрранное вещей сделать? [закрыт]

я создал таблицы users, post и psusers - пользователь, post - почты, ps - хранятся id users и post

120