# RBAC+ACL модель Это гибридная модель, где: пользователь имеет общую роль доступа (например, can\_manage\_company или viewer\_of\_sphere) и у этой роли есть контекст, т.е. привязка к объекту: компании или сфере **Таблицы** SQL запросы для PostgreSQL **Пользователи:** ```sql CREATE TABLE users ( user_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, username TEXT UNIQUE NOT NULL, fio TEXT NOT NULL DEFAULT '', phone TEXT NOT NULL, password_hash TEXT NOT NULL ); ``` **Роли:** ```sql CREATE TABLE roles ( role_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, role_name TEXT NOT NULL UNIQUE, role_description TEXT ); ``` **Сферы:** ```sql CREATE TABLE fields ( field_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, field_name TEXT NOT NULL ); ``` **Компании:** ```postgresql CREATE TABLE companies ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, field_id INTEGER REFERENCES fields(id) ); ``` Связь между всеми параметрами ```sql 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) ) ); ```