Drakonn
@Drakonn
Инженер-программист

Как корректно реализовать права на объект БД?

Здравствуйте, чуть запутался с проектированием БД (проект для обучения)

Есть сущности профиля работника - Employees;
id | ..

Офиса - Offices:
id | owner_employee_id | ..

Календаря - OfficeCalendars;
id | offices_id | ..

Событий календаря CalendarEvents
id | calendar_id | owner_employee_id | ..

Клиентов - Clients;
id | owner_employee_id | ..

Логика:
- права могут быть владельца, менеджера и просто работника;
- к офису владелец или менеджер сможет привязывать несколько сотрудников и выдавать им права;
- к событию владелец события сможет добавлять других работников привязанного к календарю офиса;
- к календарю менеджер и владелец могут добавлять работников и назначать им права;
- каждый пользователь может иметь несколько офисов и быть как владельцем/менеджером в одном, так и одновременно быть работником в другом.

Хотел сделать реализацию следующих прав:
- права на редактирование информации об офисе - только владельцу;
- права на редактирования календаря - только владельцу офиса или менеджеру;
- права на доступ к информации о клиентах - только владельцу офиса, менеджеру офиса и владельцу записи о клиенте - кто её создал;
Однако, должна быть возможность предоставления прав. например владельцу данных о клиенте дать доступ другому сотруднику, тоже самое и с событиями календаря.

Для исключения связей М:М и реализации прав добавил таблицы:
- Employees_Offices_Premissions:
Поля: Employee_id | Office_id | Premission_Offices_type
- Employees_Calendars_Premissions:
Поля: Employee_id | Calendar_id| Premission_Calendar_type
- Employees_Clients_Premissions:
Поля: Employee_id | Client_id | Premission_Client_type
- Employees_CalendarEvents:
Поля: Employee_id | CalendarEvent_id

Насколько это решение корректно и хватит ли его?
Так же я запутался - на какое поле всё-же должно быть, например у того-же события календаря в ссылке на других работников - Employees или же Employees_CalendarEvents?
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Рекомендую прочитать про концепцию ABAC или RBAC с бизнес-правилами
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы