# 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