Привилегия — минимальная единица прав: она разрешает набор действий над одним объектом, репозиторием или административной областью. Пользователю привилегии не выдаются напрямую: их перечисляет роль, а пользователь получает роли (модель целиком — в разделе Управление доступом).
Все привилегии инсталляции видны на странице «Настройки» → «Права», фильтр по типу сужает список. Каталог наполняется автоматически: административные привилегии создаются при первом запуске, привилегии на репозиторий — вместе с самим репозиторием. Для большинства задач достаточно выбрать из каталога нужные имена.
Типы
Тип определяет, над чем привилегия работает и какие у неё поля.
| Тип | Над чем работает | Поля |
|---|---|---|
repository-view | Содержимое репозитория: артефакты | Формат, репозиторий, действия |
repository-admin | Сам репозиторий: его настройки и существование | Формат, репозиторий, действия |
application | Административная область: пользователи, роли, привилегии, настройки, задачи | Домен, действия |
Одно и то же действие в двух семействах репозитория означает разное:
add в repository-view — опубликовать артефакт,
add в repository-admin — создать репозиторий.
Действия над содержимым
Привилегии repository-view оперируют пятью действиями:
| Действие | Что разрешает |
|---|---|
browse | Видеть репозиторий и его содержимое в веб-интерфейсе |
read | Скачивать артефакты клиентом формата |
add | Публиковать новые артефакты |
edit | Изменять уже опубликованное содержимое |
delete | Удалять артефакты |
Что разрешают read и browse, зависит от того, куда идёт запрос,
и одинаково для всех форматов.
read покрывает всё, что клиент формата получает при обычной работе:
и сам файл, и служебные списки, из которых он собирает зависимости, —
maven-metadata.xml с контрольными суммами, список версий Go-модуля,
дескриптор пакета npm, индексы PyPI, RubyGems и Cargo, список тегов образа.
Сборочному агенту, который только скачивает, достаточно одного read.
browse нужен для веб-интерфейса: без него репозиторий не появится в разделе «Обзор»,
даже если из него можно качать. Карточка репозитория, списки компонентов и ассетов
открываются по любому из двух действий.
Действия независимы: read не включает browse, edit не включает add. Иерархии «администрирование включает запись, запись включает чтение» нет — нужный набор действий указывается явно.
Исключение — публикация образов контейнеров:
клиент запрашивает у реестра доступ и на чтение, и на запись сразу,
поэтому для docker push нужны оба действия — read и add.
Действия над репозиторием
Привилегии repository-admin управляют самим репозиторием: его настройками
и существованием.
| Действие | Что разрешает |
|---|---|
read | Просматривать настройки репозитория |
add | Создавать репозитории |
edit | Изменять настройки, в том числе сбрасывать кеш proxy-репозитория |
delete | Удалять репозиторий |
Действие add — единственное, которое не относится к существующему репозиторию:
в момент создания его ещё нет. Поэтому право создавать репозитории выдаётся привилегией,
охватывающей не один репозиторий, а все сразу: nx-repository-admin-*-*-add
разрешает создавать репозитории любого формата.
Как устроены такие имена, разобрано ниже.
Административные области
Привилегии типа application закрывают операции, не связанные с конкретным репозиторием.
Область называется доменом:
| Домен | Что закрывает |
|---|---|
users | Учётные записи: создание, просмотр, изменение, удаление |
roles | Роли |
privileges | Привилегии |
settings | Системные настройки: анонимный доступ, цепочка реалмов, политики очистки |
tasks | Задачи: просмотр состояния, запуск и приостановка |
userschangepw | Самостоятельная смена собственного пароля |
Глаголы у административных привилегий свои: create, read, update, delete и all.
Привилегия на изменение включает и чтение своей области:
пользователь с nx-users-update видит список пользователей, отдельная nx-users-read для этого не нужна.
У домена settings нет create и delete — настройки не создают и не удаляют, их читают и меняют.
Имена привилегий
Имена привилегий построены по шаблону, в который входят область или формат, репозиторий и действие. Зная шаблон, имя нужной привилегии можно составить самостоятельно и найти его в каталоге поиском:
nx-<DOMAIN>-<VERB>— административные:nx-users-create,nx-roles-read,nx-settings-update;nx-repository-view-<FORMAT>-<REPOSITORY>-<ACTION>— содержимое:nx-repository-view-maven2-maven-releases-read;nx-repository-admin-<FORMAT>-<REPOSITORY>-<ACTION>— сам репозиторий:nx-repository-admin-docker-docker-hosted-edit.
В позиции формата и репозитория допустима подстановка *:
nx-repository-view-*-*-read — чтение во всех репозиториях,
nx-repository-view-docker-*-browse — просмотр всех репозиториев формата Docker (OCI).
Из шаблона выпадают две привилегии:
nx-tasks-run— запуск задач и приостановка сборки мусора. Только эта привилегия даёт такое право:nx-tasks-readпозволяет лишь смотреть состояние;nx-userschangepw— самостоятельная смена пароля; не входит ни в одну роль по умолчанию (Первичная настройка).
Полный доступ ко всем операциям даёт встроенная привилегия nx-all —
она входит в роль admin.
Откуда привилегии берутся
Каталог наполняется без участия администратора:
- при первом запуске создаются административные привилегии по каждому домену и привилегии с подстановкой: на все репозитории сразу и на все репозитории каждого формата;
- при создании репозитория появляется набор привилегий на него: на каждое действие с содержимым и на каждое действие с самим репозиторием. Удаляются они вместе с репозиторием.
Встроенные привилегии доступны только для чтения: изменить или удалить их нельзя. В роли они включаются так же, как любые другие.
Собственные привилегии
Прежде чем создавать свою привилегию, поищите подходящую в каталоге: большинство задач закрывается встроенными именами.
Встроенный каталог не покрывает один случай — администратор всех репозиториев одного формата.
Готовые привилегии repository-admin с подстановкой есть только на все форматы сразу
(nx-repository-admin-*-*-<ACTION>), а привилегия «все Maven-репозитории и никакие другие»
создаётся вручную: тип repository-admin, формат maven2, репозиторий *, нужные действия.
Создать привилегию можно на странице «Настройки» → «Права» кнопкой «+ Новое право». Правила при создании:
- Имя. Имена, начинающиеся с
nx-, зарезервированы за встроенным каталогом. Для своих привилегий выберите другой префикс, напримерteam-. - Формат и репозиторий. Если указан конкретный репозиторий, он должен существовать и принадлежать выбранному формату: привилегия с форматом
maven2и репозиториемdocker-hostedне создастся. Если в позиции репозитория стоит*, формат всё равно должен быть одним из поддерживаемых Galleon. - Домен. Домен административной привилегии со списком доменов не сверяется. Опечатка вроде
userвместоusersошибки не вызовет: привилегия сохранится, её можно будет включить в роль, но прав она не даст ни на одну операцию. Сверяйтесь с таблицей доменов выше.
Удаляя репозиторий, удалите и созданные вручную привилегии на него. Автоматические удаляются вместе с ним, а ваши остаются в ролях и снова начнут действовать, если репозиторий с тем же именем и форматом создадут заново.
Типовые роли
Что положить в роль под конкретную задачу:
| Задача | Привилегии |
|---|---|
| Сборочный агент только скачивает | nx-repository-view-*-*-read |
| Сборочный агент публикует в один репозиторий | nx-repository-view-<FORMAT>-<REPOSITORY>-add; для образов контейнеров добавьте -read |
| Разработчик работает через веб-интерфейс | browse и read на нужные репозитории |
| Администратор репозиториев одного формата | Собственная привилегия repository-admin с форматом docker и * в позиции репозитория, действия read, edit, delete — управление всеми репозиториями Docker (OCI) и никакими другими |
| Дежурный по обслуживанию | nx-tasks-read и nx-tasks-run — видеть состояние сборки мусора, запускать её и ставить на паузу |
Роль собирается на странице «Настройки» → «Роли». В роль можно включить другие роли: пользователь с такой ролью получает и её собственные привилегии, и привилегии включённых в неё ролей. Те тоже могут содержать роли, и привилегии собираются по всей цепочке. Так делают базовую роль с общими правами и добавляют её в роли команд. Роль нельзя включить в саму себя, в том числе через промежуточные роли: сервер отклонит такую вложенность.