Задать вопрос
@ChertyakaNUB

Роли и разрешения, как сделать разрешения для записей?

Народ, привет всем!

Стоит пакет laravel-permissions. Даны роли пользователям(admin,manager) и некоторые права(edit,view,delete,create).

Пакет прекрасно работает, можно выставить в шаблонах показ контента для определенных ролей и разрешений.

Но как сделать так, чтобы пользователи видели только те записи выведенные из БД, к которым имеют разрешения?

Допустим, в шаблоне выводится таблица данных из бд, этот шаблон с таблицей виден всем пользователям, а как сделать так или что указать в шаблоне/сервисе, чтобы записи в таблице видели каждый пользователь свои, согласно правам?

Например, создал админ 6 записей в бд, и создал одно разрешение("record-one") под эти виды записей(3 записи имеет поле в бд: "one", остальные три: "two"), затем наградил этим разрешением одного менеджера, чтобы при показе шаблона этому менеджеру показывались только записи, которые имеют поле со значением "one".

Получается нужно узнать имеет ли права пользователь cо slug "record-", если имеет то вынуть все имеющиеся права в массив, из каждого элемента удалить текст "record-", при этом получатся все значения прав на записи, и затем производить поиск в базе по значениям из массива и выводить их в шаблоне.
Правильно ли так делать?
  • Вопрос задан
  • 119 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Skillbox
    PHP-фреймворк Laravel
    2 месяца
    Далее
  • Яндекс Практикум
    Фулстек-разработчик расширенный
    20 месяцев
    Далее
Решения вопроса 1
@ChertyakaNUB Автор вопроса
Вообщем, как сам сказал, так и сделал, все работает!
...
$perms = auth()->user()->permissions;
            $records= array();
            foreach($perms as $perm){
                if (strpos($perm->slug, 'record-') !== false) {
                    $records[] = str_replace('record-','',$perm->slug);
                }
            }

            $table = Record::query();
            $table->whereIn('name_record', $records);
            return Datatables::eloquent($table)
...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы