За последние 24 часа нас посетили 22540 программистов и 1277 роботов. Сейчас ищут 842 программиста ...

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

Тема в разделе "Laravel", создана пользователем sx000, 2 окт 2018.

  1. sx000

    sx000 Активный пользователь

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

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

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

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

    -----------

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


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


    Спасибо за помощь!
     
  2. Почтальон

    Почтальон Новичок

    С нами с:
    1 июл 2018
    Сообщения:
    13
    Симпатии:
    1
    Адрес:
    Сызрань
    В профиле менеджера можно добавить поле, которое будет указывать на страну, при выборке данных из базы фильтровать по этому признаку.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Уверен, что есть более одного рабочего решения. Как сделал бы я, зная что это проект на Laravel:
    Использовал бы роли пользователей. Одна роль имеет доступ к стране А, другая к стране Б. В перспективе таких ролей может быть больше. Один пользователь может обладать сразу несколькими ролями, если над — так можно дать ему права на любой набор стран.
    (Замечание: сами по себе роли не фильтруют записи, но добавить scope для целевых таблиц несложно, если немного разобраться как роли реализованы на уровне таблиц.)

    Ещё конкретнее, для управления ролями я бы взял пакет Laratrust (форк от заброшенного Entrust) — в нём есть понятие "команда" (team) оно вообще идеально ложится на задачу. Принимаем, что страна == команда. Можно пользователю аттачить не просто роль, но роль в привязке к команде. Типа кто-то имеет роль manager@russia, кто-то manager@ukraine и т.д. Предположим, что некие "супермодераторы" обладают ролью без привязки к стране, это будет означать доступ к любой из них.

    Без "команд" с другой библиотекой RBAC тоже можно было бы разрулить, но пришлось бы использовать кратно больше ролей.

    У меня есть опыт настройки подобной системы, только там вместо "страны" используется "фирма-партнер". Общий движок сайта для всех партнеров, но с фильтрацией по ролям/командам. Поддомены для партнеров, которые отображаются реально на один хост, а индивидуальная стилизация и контроль доступа создают впечатление, что сайтов несколько.

    На платной основе могу повторить.

    Полезные ссылки:
    https://www.easylaravelbook.com/blog/using-scopes-with-laravel-5/
    https://laratrust.readthedocs.io/en/4.0/
    https://laravel.com/docs/5.7/eloquent#query-scopes