Я пытаюсь найти лучший способ для базовой системы безопасности для веб-сайта. Я знаю, что я хочу, чтобы пользователи и группы.
Я думал, что у меня будет:
user_table
user_id
user_name
...
group_type
group_id
group_name
parent_id
...
group_table
id
user_id
group_id
Первый - это пользователь, второй - это группа, а третий - промежуточная таблица, которая связывает их. У одного пользователя есть много групп.
Это звучит нормально?
database-design
Джонни
источник
источник
GROUP_TYPE
таблица должна быть названаGROUP
или иметь что-то похожее, а вашаGROUP_TABLE
должна ссылаться как на пользователей, так и на группы, поскольку это то, что она связывает.SELECT
и поле,FROM
чтобы у вас был запрос типаSELECT [FROM] FROM [SELECT]
Ответы:
Традиционный способ моделирования это использование шаблона под названием Role-Based Security .
Идея состоит не только в том, чтобы иметь группы пользователей, но также и группы прав доступа. Вот как выглядит шаблон:
Обратите внимание, что вы хотите избежать зарезервированных слов для имен таблиц, поэтому не называйте ваши таблицы точно так, как показано на диаграмме.
Это работает так, что ваши группы или роли имеют не только список назначенных им пользователей, но и список назначенных им разрешений. Это позволяет вам следить за тем, кто может что-то делать, но также и за тем, что они могут делать, если вы последуете за мной.
источник
ROLE
таблица может быть подразделена на отдельные типы и типы групп , где тип группы имеет ноль для многих членов, а отдельный тип имеет ровно один элемент. Как вы применяете эти правила кардинальности, зависит от вас. Это может быть сделано декларативно в вашей схеме базы данных, в этом случае вам нужно немного изменить изображенную схему. Или вы можете использовать логику приложения, и в этом случае ваша схема по-прежнему выглядит так, как я изобразил выше.