Перш за все, який тип безпеки ви плануєте реалізувати? Рольовий контроль доступу (RBAC) або дискреційний контроль доступу (DAC)?
RBAC в моделі рольового контролю доступу (RBAC), доступ до ресурсів базується на ролі, відведеній користувачеві. У цій моделі адміністратор призначає користувача ролі, яка має певні заздалегідь визначені права та привілеї. Через асоціацію користувача з роллю користувач може отримати доступ до певних ресурсів і виконувати конкретні завдання. RBAC також відомий як недискреційний контроль доступу. Ролі, призначені користувачам, здійснюються централізовано.
ЦАП У моделі дискреційного контролю доступу (ЦАП) доступ до ресурсів базується на особі користувача. Користувачеві надаються дозволи на ресурс, розміщуючись у списку контролю доступу (ACL), пов’язаному з ресурсом. Запис ACL ресурсу відомий як запис доступу доступу (ACE). Коли користувач (або група) є власником об'єкта в моделі DAC, він може надати дозвіл іншим користувачам і групам. Модель ЦАП заснована на власності на ресурси.
див. джерело
1) У RBAC: вам потрібна таблиця ElementType для присвоєння прав ролі (користувачі присвоюються ролям). RBAC визначає: "Що може робити ця роль / користувач". Адміністратор призначає права на ролі та дозволи на ролі, призначає користувачів на ролі (и) для доступу до ресурсів. 2) У DAC: користувачі та ролі мають права на елементи через список контролю доступу (права власності). ЦАП визначає: "хто має доступ до моїх даних". Користувач (власник) надає дозволи на ресурс, що належить.
Будь-який спосіб я пропоную цю модель даних:
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)
...
)