Описанный вами метод - индивидуальные привилегии, хранящиеся в столбцах, - это просто за счет гибкости (как вы заметили).
Метод Zuul является еще более простым и, по сути, таким же, как ваш, за исключением того, что он избегает необходимости в каких-либо утверждениях «ALTER TABLE». Тем не менее, это не нормируется, не легко запрашивается, а не самодокументируется.
Другая проблема с обоими этими методами заключается в том, что по мере роста вашей пользовательской базы вы обнаружите, что она все больше болит, чтобы все привилегии пользователя были установлены правильно. Вы окажетесь с большим количеством пользователей, которым нужны те же привилегии. Тем не менее, чтобы изменить привилегии пользователя, например, для размещения новой привилегии, вам нужно будет войти и добавить эту привилегию каждому пользователю, который нуждается в ней по отдельности. Майор ПИТА.
Для форума маловероятно, что вам понадобится управление привилегиями для каждого пользователя. Скорее всего, у вас будут определенные классы пользователей, такие как анонимные пользователи, зарегистрированные пользователи, модераторы, администраторы и т. Д. Это сделает его подходящим для управления доступом на основе ролей (RBAC). В этой системе вы должны назначить каждого пользователя роли и предоставить привилегии этой роли. Привилегии будут храниться как строки в таблице «привилегии». поэтому упрощенная схема базы данных будет выглядеть так:
PRIVILEGE
int id (primary key)
varchar description
ROLE_PRIVILEGE_JOIN
privilege_id (foreign key)
role_id (foreign key)
ROLE
int id (primary key)
varchar description
USER
int id (primary key)
int role_id (foreign key)
Этот шаблон используется во многих приложениях, имеющих отношение к пользовательским привилегиям. Добавьте все привилегии, которые любой мог бы иметь в виде строки в таблице привилегий; добавьте каждую роль, которую любой пользователь мог бы иметь в таблице ролей; и соответствующим образом свяжите их в таблице role_privilege_join.
Единственный реальный недостаток заключается в том, что, поскольку используется таблица соединений, запрос «can user X do Y» будет несколько медленнее.
Хорошее описание на ловушках битмаски и магических струн. – itchi
Спасибо за это, я думал о бит-масках, потому что его кое-что не удалось полностью справиться с этим, и я предположил, что должен точно знать, что это такое и как они работают, прежде чем я приму твердое решение о том, как будет работать система разрешений , но теперь вы помещаете его в контекст, так как нет необходимости в битовой маске, поскольку он просто создает простую задачу внутри приложения, плюс это позволяет легко сортировать, когда дело доходит до управления привилегиями в ACP. благодаря – RobertPitt