---
# System prepended metadata

title: NOC Access Model

---

# NOC Access Model

## Access Token
Токен доступа, открывающий путь к endpoint. Пополняются из коллекции

* name
* uuid
* description
* min_level - минимальный уровень
* max_level - максимальный уровень
* is_scoped - ограничен областью

Типовая семантика уровней:

0. Явный запрет
1. Чтение
2. Обновление
3. Создание
4. Удаление

## Access Scope
Область доступа (например, набор оборудования или префиксов)

* name
* description
* parent - ссылка на родителя

В корне дерева всегда идет scope `global`,
Родительский scope дает доступ ко всем вложенным scope.

Ограничения: проверка на циклы

@todo: имена вроде mo:1

@todo: Привязка через группы или administrative domain

## Access Role
Роли доступа, типовые роли пополняются через коллекции

* name
* uuid
* description
* tokens - набор токенов
    * token - ссылка на AccessToken
    * level - требуемый уровень
* roles - список сгруппированых ролей
    * role - ссылка на AccessRole

Ограничения:
* Проверка на циклы

## Group
Содержит список ролей + список scope (+max_level)

## User
Содержит список групп и ролей + список scope (+max_level)

## Эффективные токены пользователя
Все токены ролей и групп. В случае, если достался токен с уровнем
0 - доступ запрещен. В противном случае, в качестве эффективного берется максимальный уровень.

## API Endpoint
Для ограничения по токену добавляется декоратор

@access(token=xxxx, level=xxxx)

## Ограничения по scope
В моделях, допускающих разденение по scope добавляется поле

* scopes - список scope.

Поле scopes индексируется.

В условиях запроса всегда добавляет scopes IN `user_scopes`

## Вопросы

* Выставление scope при создании
* Обновление scope