Skip to main content

RBAC+ACL модель

Это гибридная модель, где: пользователь имеет общую роль доступа (например, can_manage_company или viewer_of_sphere) и у этой роли есть контекст, т.е. привязка к объекту: компании или сфере

Таблицы

SQL запросы для PostgrSQLPostgreSQL

Пользователи: 

CREATE TABLE users (
    user_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    username VARCHAR(100)TEXT UNIQUE NOT NULL,
    fio VARCHAR(100)TEXT NOT NULL DEFAULT '',
    phone VARCHAR(12)TEXT NOT NULL,
    password_hash TEXT NOT NULL
);

Роли: 

CREATE TABLE roles (
    role_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    role_name TEXT NOT NULL UNIQUE,
    role_description TEXT
);

Сферы: 

CREATE TABLE fields (
    field_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    field_name TEXT NOT NULL
);

Компании:

Связь между всеми параметрами

CREATE TABLE user_role_assignments (
    user_id INTEGER REFERENCES users(id),
    role_id INTEGER REFERENCES roles(id),
    field_id INTEGER REFERENCES fields(id),      -- либо это...
    company_id INTEGER REFERENCES companies(id), -- ...либо это
    PRIMARY KEY (user_id, role_id, field_id, company_id),
    CHECK (
        (field_id IS NOT NULL AND company_id IS NULL) OR
        (field_id IS NULL AND company_id IS NOT NULL)
    )
);