Прежде всего, какую модель безопасности вы планируете внедрить? Управление доступом на основе ролей (RBAC) или Дискреционное управление доступом (DAC)?
RBAC в модели управления доступом на основе ролей (RBAC), доступ к ресурсам основан на роли, назначенной пользователю. В этой модели администратор назначает пользователю роль, которая имеет определенные предопределенные права и привилегии. Из-за ассоциации пользователя с ролью пользователь может получить доступ к определенным ресурсам и выполнять определенные задачи. RBAC также известен как недискреционный контроль доступа. Роли, назначенные пользователям, администрируются централизованно.
DAC В модели Discretionary Access Control (DAC) доступ к ресурсам основан на идентичности пользователя. Пользователь получает разрешения для ресурса, будучи помещенным в список управления доступом (ACL), связанный с ресурсом. Запись в ACL ресурса известна как запись контроля доступа (ACE). Когда пользователь (или группа) является владельцем объекта в модели DAC, пользователь может предоставить разрешение другим пользователям и группам. Модель DAC основана на владении ресурсами.
увидеть источник
1) В RBAC: вам нужна таблица ElementType для назначения прав на роль (пользователям назначаются роли (и)). RBAC определяет: «Что может сделать эта роль / пользователь». Администратор назначает права ролям и разрешения ролям, назначает пользователей ролям для доступа к ресурсам. 2) В ЦАП: пользователи и роли имеют права на элементы через список контроля доступа (владение). ЦАП определяет: «у кого есть доступ к моим данным». Пользователь (владелец) предоставляет разрешения на принадлежащий ему ресурс.
В любом случае я предлагаю эту модель данных:
CREATE TABLE ElementType
(
Id (PK)
Name
...
)
CREATE TABLE ElementBase
(
Id (PK)
Type (FK to ElementType)
...
)
(отношения один на один)
CREATE TABLE Element_A
(
Id (PK, FK to ElementBase)
...
)
CREATE TABLE Element_B
(
Id (PK, FK to ElementBase)
...
)
1) RBAC (отношения многие ко многим)
CREATE TABLE ElementType_To_Role_Rights
(
RightId (PK)
RoleId (FK to Role)
ElementTypeId (FK to ElementType)
...
)
2) ЦАП (отношения многие ко многим)
CREATE TABLE ElementBase_To_Actor_Rights
(
RightId (PK)
ElementBaseId (FK to ElementBase)
ActorId (FK to Actor)
...
)
CREATE TABLE Actor
(
Id (PK)
Name
)
CREATE TABLE User
(
Id (PK, FK to Actor)
Password
...
)
CREATE TABLE Role
(
Id (PK, FK to Actor)
...
)