Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 02.10.2018 21:40:53

Права доступа для опредленных записей в базе

Магазин на базе Laravel 5.4.
Есть заказы на две страны: 1 и 2.
Мне нужно чтоб менеджер из 1 страны видел только заказы для страны 1, соответственно 2 менеджер видел только заказы с страны 2.
Понятно что в базе можно сделать поле, с отношением ... еще можно сделать связующую таблицу.
А что если завтра появиться третья страна и мне надо будет менеджеру 1 предоставить доступ к записям страны 3, и новому менеджеру 3 предоставить доступ к стране 3.
Как можно гибко это реализовать? И самое главное понять!!! smile

я так понимаю что мы имеем юзеров
1 2 3 … X
и имеем группы, фактически юзеры не имеют доступов ни к чему, имеют только группы.
Те создаем таблицу groups, и при создании в ней записи группы скажем
1 - managaers Russia
2 - managers Ukraine
Создаем таблицу связывающую таблицу users и groups, называем ее connection
где будут перечисляться ID юзеров и соответственно ID группы в которую он имеет отношение. И так может 1 юзер у нас иметь отношение сразу в несколько групп.

Также для заказов будет еще своя таблица связывающая connection_perm
в которой мы указываем ID страны, и ID группы может работа с этой страной. И так мы можем к каждой стране атачить несколько групп.

Вот я примерно так вижу, может сильно запутанно?

-----------

еще как вариант сделать ответственного за конкретный заказ, согласно каким то критериям, например. Зашел заказ… мы создаем правило:
если заказ содержит russia то мы направляем рандомному то из отдела managers russia, ну или показываем всем пока кто то не кликнул на кнопку взял заказ например он исчезает из входящего пула и становиться доступен только ответственному человеку. Вообще такая система реализована в битриксе, как бы логически продумать ее у себя, там очень гибко можно правила настраивать. Есть по сути только менеджеры и доступ к сущностям как бы стандартная система уровня доступов.


Есть проще вариант?


Спасибо за помощь!

Изменено Normand (02.10.2018 22:27:41)

Не в сети

#2 03.10.2018 08:49:09

Re: Права доступа для опредленных записей в базе

Здравствуйте.
Мне кажется самый простой вариант добавить юзерам в бд поле 'страна' (если , конечно, менеджеры это юзеры с ролью manager, если они хранятся как то по другому, то поле туда соответственно). Значение в этом поле должно точно совпадать с идентификатором или названием страны в соответствующей таблице. Как его туда подтягивать , по связи или тупо вбивать вручную, это уже от вашей фантазии. Ну и, естественно, такое же поле (страна), с таким же значением должно присутствовать в заказе.
Ну а потом в AuthServiceProvider сделать gate типа

public function boot()
{
  $this->registerPolicies();

  Gate::define('work-with-order', function (User $user, Order $order) {
    return $user->country == $order->country;
  });
}

Ну а дальше уже от фантазии, хотите в контролере навесьте этот gate через конструктор

public function __construct()
    {
        $this->middleware = ['can:work-with-order'];
    }

Хотите в роутах на нужный (нужные) маршрут(ы) навесьте этот middleware, можно прямо в разметке show попробовать

@can('work-with-order')
  'ваша разметка show.blade.php'
@endcan

вот как то так ).

Все это есть в доках https://laravel.ru/docs/v5/authorization

Изменено abutan (03.10.2018 08:51:23)

Не в сети

Подвал раздела