0

Я разрабатываю больничную систему, где пациенты могут разрешить пользователю доступ к своей информации в соответствии с их выбором. Существуют разные группы пользователей, например, врачи, медсестры, регистрационные клерки, страховщики и менеджеры. Пользователь может получить доступ к личным данным пациента, медицинским данным пациента, подробным сведениям о предписаниях пациента или обо всем. Каждый пользователь идентифицируется уникальным «user_id» и каждой группой уникальным «group_id».Дизайн таблиц прав доступа

Пациент может блокировать:
1. одного пользователя (например, медсестра)
2. группу (например, все медсестры)
3. группа с некоторыми исключениями (например, блокирование всех медсестер, кроме nurse1 и nurse3)
4. конкретных пользователей, но чтобы их соответствующие группы (например, разрешить все медсестры кроме nurse1 и nurse3)

После предоставления доступа к пользователю или группе они будут назначены разрешения, как чтение, запись и удаление.

У меня возникли проблемы с разработкой таблицы (-ов) вместе со своими полями, чтобы я мог хранить эти данные о правах доступа.

+0

Вы можете посмотреть на ACL (Access Controls Lists) могут, как они работают в ОС, как Windows \ Linux. Вы собираетесь реализовать аналогичную функциональность. С точки зрения БД это было бы непросто, но логика приложения была бы жесткой. – Alsin

ответ

0

Сначала я бы отказался от всех пользователей и групп в качестве стандарта. И тогда следующие структуры таблиц:

tblPatients

Имя, patient_id (я предпочел бы UUID) и т.д.


tblUsers

Имя, user_id (я бы предпочитают uuid) и т. д.

tblGroups

Имя, GROUP_ID (я предпочел бы UUID) и т.д.

tblUsersGroups

users_groups_id, user_id, group_id

ссылок user_id на tblUsers и GROUP_ID к tblGroups.

Идея структуры tblUsers, tblGroups и tblUsersGroups заключается в том, что пользователь может быть членом нескольких групп.


Теперь к важной части, белый список:

tblWhitelist

идентификатор, patient_id, write_group_id, write_user_id, read_group_id, read_user_id, delete_group_id, delete_user_id

В этой таблице вы поместите идентификаторы доступа, я бы сделал это каждый в каждой строке, и вы можете иметь столько правил там, сколько хотите.

Для вашего запроса вам потребуется имя пользователя или user_id, получите членство этого пользователя в tblUserGroups, а затем посмотрите на tblWhitelist, разрешено ли пользователю или его группе выполнять действие. Права пользователя должны иметь более высокий приоритет.

Я думаю, этот способ может работать,

Смежные вопросы