Как сделать (Пространство / Разрешения) роль или разрешение доступными (назначаемыми) только для определенного типа учетной записи c - PullRequest
0 голосов
/ 25 марта 2020

Некоторая справочная информация / требования о моем (Laravel 7) проекте, необходимые для понимания / ответа на мой вопрос.

  • У моего приложения есть учетные записи, которые могут иметь один или больше пользователей (отношение один ко многим)
  • У каждой учетной записи есть тип (например, система, организация, клиент)
  • Я хочу иметь возможность назначать роли пользователю
  • Я хочу иметь возможность назначать разрешения пользователям через роль (только через роль, а не непосредственно пользователю)
  • Роль должна быть указана с типом c - поэтому она может быть назначена только для одного указанного c типа учетной записи
  • Разрешение должно быть назначено для всех ролей определенного (поэтому 1 ... *) типа (ов) учетных записей

Я искал хорошее решение для достижения требований, описанных выше и найдено Laravel Spatie Permissions. Я думаю, что эта библиотека подойдет для решения моей "проблемы", но в ней отсутствуют некоторые функции. Насколько я могу найти, невозможно:

  1. Определить роли для определенного c типа учетной записи
  2. Ограничить разрешения для ролей определенных типов учетных записей

Пример

  • Роль admin_default
    • может create_system_users и see_organizations
    • может только назначаться пользователям учетной записи с типом system
  • Роль customer_default
    • может see_organizations
    • назначаться только пользователи учетной записи с типом customer
  • Разрешение create_system_users может быть назначено только ролям для учетных записей с типом system
  • Разрешение see_organizations можно назначить роли для учетных записей с типом system organization customer

Возможное решение 1.

Я мог бы добавить дополнительный столбец (например, account_type, type: integer) к таблице ролей, которая определяет, какому типу учетной записи назначается роль. Мне нужно добавить дополнительные проверки для некоторых функций библиотеки разрешений, например, asignRole() и syncRoles().

Возможное решение для 2.

Я мог бы добавить дополнительные столбец (например, account_type, type: bitflag) таблицы разрешений, который определяет, каким ролям (связанным с типом учетной записи) может быть назначено разрешение.

Поскольку Spat ie Разрешение не поддерживает это по умолчанию, мне нужно добавить функциональность, в основном, если проверка вокруг логики c существующих функций. Поскольку я не хочу вносить изменения в саму библиотеку, я подумал сделать несколько классов, которые наследуют классы Role и Permission и "наследуют" HasRoles и HasPermissions. Я бы указывал записи roles и permissions в конфигурационном файле Permission.php на мои собственные классы и переопределял use признаков в моих собственных классах своими собственными характеристиками (не уверен, если это возможно / должно работать в PHP но мой лог c говорит, что он должен работать, отсутствие PHP знаний)

Мои вопросы

Является ли Spatie Permissions правильной библиотекой использовать или, может быть, есть лучшее решение "полки", чтобы решить мою проблему? (или mayble Spatie Permissions поддерживает это по умолчанию, но я не знаю этого?)

Когда Spatie Permissions - это "лучший способ go", мой Possible solutions - хороший подход? и должно ли это работать? (сейчас, но также и когда библиотека разрешений обновляется, так ли это на будущее?)

Я тоже могу написать что-то, но я думаю, что это своего рода изобретать колесо или?

Примечание: я также думаю о таких вещах, как будущее и масштабируемость

...