Что было бы идеальной структурой для пользователей> разрешений объектов.MySQL - Структура для разрешений на объекты
Я видел много связанных должностей для общих разрешений или в каких разделах пользователь может получить доступ, который состоит из users
, userGroups
и userGroupRelations
или что-то в этом роде.
В моей системе есть много разных объектов, которые могут быть созданы, и каждый из них должен быть включен или выключен. Например, возьмите менеджер паролей, в котором есть группы и подгруппы.
Group 1
Group 2
Group 3
Group 4
Group 5
Group 6
Group 7
Group 8
Group 9
Group 10
Каждая группа может содержать набор паролей. Пользователь может получать разрешения на чтение, запись, редактирование и удаление в любую группу. В любой момент времени могут создаваться новые группы.
Если у кого-то есть разрешение на группу, я должен быть в состоянии сделать его доступным для всех подгрупп или ограничить его только этой группой.
Моя текущая мысль, чтобы иметь таблицу пользователей, а затем таблица разрешений с колоннами, как:
permission_id (int) PRIMARY_KEY
user_id (int) INDEX
object_id (int) INDEX
type (varchar) INDEX
admin (bool)
read (bool)
write (bool)
edit (bool)
delete (bool)
Это работало в прошлом, но новая система Я здание должно быть в состоянии быстро, и я не уверен, что это лучшая структура. Это также заставляет задуматься о том, что кому-то со всеми подгрупповыми правами группы сложнее.
Будет отдельная таблица для ролей пользователей/админов, что означает, что они могут изменять разрешения для пользователей ниже групп, которым они могут управлять.
Итак, в качестве вопроса, следует ли использовать вышеуказанную структуру? Или может кто-то указать мне в сторону лучшего?
EDIT
Альтернатива заключается в создании таблицы разрешений для каждого типа объекта.
@ Олли - большое вам спасибо. Столбец 'type' определяет тип объекта, это поможет сопоставить' object_id' с primary_key в отдельной таблице. Тип разрешения 'admin' был таким же, как ваш' grant'. Я также не знал, что вы могли бы создать несколько столбцов в одной первичной_ключи (благодаря отсутствию формального обучения), и я думаю, что это гораздо лучшая идея. Все, что вы сказали, подразумевало, что первое будет лучше, ** мой единственный вопрос: ** несколько пользователей могут иметь доступ к одному и тому же объекту. Если новый объект будет создан, мне придется сканировать пользователей для применения новых разрешений? –
Да, ваша дисциплина создания объектов потребует, чтобы вы добавляли строки разрешений для каждого пользователя для каждого нового объекта. Учтите, что у многих таких систем есть глобальные настройки разрешения по умолчанию. Например, вы можете настроить все, чтобы любой пользователь, чей идентификатор не появился в таблице разрешений, имел бы разрешение READ, но ничего больше. То же самое, пользователь, создающий объект, имел бы READ/EDIT/DELETE и ничего больше. (Я не уверен в различии между WRITE и EDIT. Для объекта, который еще не был создан, есть привилегия, если только привилегия WRITE не означает CREATE SUBOBJECT.) –
Ха-ха, да, это означает CREATE SUBOJECT, еще раз спасибо, я бы хотел дать вам больше + 1, это очень помогло –