Сначала вам нужно выяснить, какие функции вы хотите охватить своей системой разрешений, и в каких деталях:
Доступ к таблицам (список, CRUD)
Функция / модули
Доступ на уровне записи (= ACL)
Положительная (предоставление) или Отрицательная (отзыв) семантика
Что разрешено делать роли «администратор»
Если вы хотите ограничить доступ к таблицам, вы можете легко настроить дополнительную таблицу, содержащую все имена таблиц, и предоставить select-list / select-record / insert / update / delete доступ к ролям / группам, как показано на рисунке. СП.
Если вы хотите предоставить доступ к функциям или модулям, имейте таблицу модулей и предоставьте выполнение ролям / группам.
Обе функции эквивалентны грантам в SQL.
Ограничение доступа на уровне записи намного сложнее, так как вам необходимо смоделировать права доступа к статусу записи (например, «общедоступный», «частный», «выпущен» в приложениях CMS) или иметь явные разрешения для каждого запись.
Если вы хотите реализовать схему разрешений, эквивалентную NTFS, вы рассчитываете разрешение для каждой записи на основе группы, к которой назначен пользователь, и имеете специфичные для пользователя разрешения, которые могут переопределять разрешения группы, и отзывать переопределяющие разрешения.
Мои приложения обычно работают на уровне таблицы + функции / группы, что может быть достаточно хорошим, в зависимости от ваших требований.