Как сделать (Spatie/Permissions) роль или разрешение доступными (назначаемыми) только для определенного типа учетной записи

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

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

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

  1. Определите роли для определенного типа учетной записи
  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) в таблицу разрешений, которая определяет, каким (связанным с типом учетной записи) ролям может быть назначено разрешение.

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

Мои вопросы

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

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

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

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

0 ответов

Другие вопросы по тегам