# 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