# Описание ролевого доступа 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** | dadata | view | |
Запрос данных пресета запроса индекса (для отрисовки отчета беком). **GET: /index/query/preset/{preset\_id}** | index\_query\_preset | view | |
Запрос индекса в json **POST: /index/query** | index\_query | view | |
Экспорт индекса в файл **POST: /index/query/{format}** | index\_query | view | |
Запрос списка шаблонов запроса индекса **GET: /reports** | report | view | ✔ |
Запрос информации по конкретному шаблону запроса индекса **GET: /reports/{report\_id}** | report | view | ✔ |
Создание нового шаблона запроса индекса **POST: /reports** | report | edit | ✔ |
Изменение конкретного шаблона запроса индекса **PATCH: /reports/{report\_id}** | report | edit | ✔ |
Удаление конкретного шаблона запроса индекса **DELETE: /reports/{report\_id}** | report | edit | ✔ |
Запрос списка шаблонов рассылок **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** | role | view | |
Запрос списка прав **GET: /roles/rights** | role | view | |
Создание новой роли **POST: /roles** | role | edit | |
Изменение конкретной роли **PATCH: /roles/{role\_id}** | role | edit | |
Удаление конкретной роли **DELETE: /roles/{role\_id}** | role | edit | |
Запрос списка пользователей **GET: /users** | user | view | ✔ |
Запрос информации по конкретному пользователю **GET: /users/{user\_id}** | user | view | ✔ |
Создание нового пользователя **POST: /users** | user | edit | ✔ |
Изменение конкретного пользователя **PATCH: /users/{user\_id}** | user | edit | ✔ |
Изменение пароля конкретного пользователя **PATCH: /users/{user\_id}/password** \* при изменении собственного пароля - без проверки ролей. | user, None\* | edit | None\* | ✔ |
Удаление конкретного пользователя **DELETE: /users/{user\_id}** | user | edit | ✔ |