# Описание ролевого доступа 1. Ролевая система должна обеспечивать уровень доступа на уровне сущности. С правами "Видимость", "Редактор" 1. Например. недоступна видимость и редактирование шаблонов. Доступно редактирование объектов. Доступно видимость клиентов, не доступно редактирование. 2. ### Предложение по ролевой системе на бекенде TODO... Ролевая система на бекенде реализуется на базе JWT токена ```JSON { ... "user_id": USER_ID, "organization_id": ORGANIZATION_ID, "roles": LIST_OF_ROLES, "type": TOKEN_TYPE, "rights": RIGHTS_MAP, ... } ``` - USER\_ID - id пользователя на бекенте (у суперпользователя равен 0) - ORGANIZATION\_ID - id клиента(организации) (у суперпользователя отсутствует или равен None) - LIST\_OF\_ROLES - список (со строками) ролей назначенных пользователю на беке - TOKEN\_TYPE - тип токена (access или refresh) - RIGHTS\_MAP - агрегированный словарь с правами и их значениями ##### Варианты ролевого доступа (возможно комбинирование) - доступ к роуту по значения права из RIGHTS\_MAP - на роут устанавливается связка **right\_name**: **minimum\_value** - right\_name - названия права доступа - minimum\_value - минимальное значение права для доступа - view - 1 - edit - 2 - admin - 3 - при запросе на роут сверяются значение RIGHTS\_MAP - наличие установленного на роут **right\_name** в токене - значение **minimum\_value** в токене - доступ по значению ORGANIZATION\_ID. внутри роута производится проверка соответсвия принадлежности сущности и пользователя к одной организации (для суперпользователя не производится) - доступ по TOKEN\_TYPE - только для **POST: /auth/refresh** - производится проверка значения TOKEN\_TYPE из токена
**Кейс (URL)****Право****Минимальное значение права****Сверка ORGANIZATION\_ID**
Запрос данных из dadata. **POST: /dadata/suggest/address** dadataview
Запрос данных пресета запроса индекса (для отрисовки отчета беком). **GET: /index/query/preset/{preset\_id}** index\_query\_preset view
Запрос индекса в json **POST: /index/query** index\_queryview
Экспорт индекса в файл **POST: /index/query/{format}** index\_queryview
Запрос списка шаблонов запроса индекса **GET: /reports** reportview
Запрос информации по конкретному шаблону запроса индекса **GET: /reports/{report\_id}** reportview
Создание нового шаблона запроса индекса **POST: /reports** reportedit
Изменение конкретного шаблона запроса индекса **PATCH: /reports/{report\_id}** reportedit
Удаление конкретного шаблона запроса индекса **DELETE: /reports/{report\_id}** reportedit
Запрос списка шаблонов рассылок **GET: /campaigns** campaign (report?) view
Запрос информации по конкретному шаблону рассылки **GET: /campaigns/{campaign\_id}** campaign (report?) view
Создание нового шаблона рассылки **POST: /campaigns** campaign (report?) edit
Изменение конкретного шаблона рассылки **PATCH: /campaigns/{campaign\_id}** campaign (report?) edit
Удаление конкретного шаблона рассылки **DELETE: /campaigns/{campaign\_id}** campaign (report?) edit
Запрос списка ролей **GET: /roles** roleview
Запрос списка прав **GET: /roles/rights** roleview
Создание новой роли **POST: /roles** roleedit
Изменение конкретной роли **PATCH: /roles/{role\_id}** roleedit
Удаление конкретной роли **DELETE: /roles/{role\_id}** roleedit
Запрос списка пользователей **GET: /users** userview
Запрос информации по конкретному пользователю **GET: /users/{user\_id}** userview
Создание нового пользователя **POST: /users** useredit
Изменение конкретного пользователя **PATCH: /users/{user\_id}** useredit
Изменение пароля конкретного пользователя **PATCH: /users/{user\_id}/password** \* при изменении собственного пароля - без проверки ролей. user, None\*edit | None\*
Удаление конкретного пользователя **DELETE: /users/{user\_id}** useredit