Permissions - aix27249/agiliarepo GitHub Wiki

Права доступа (permissions)

Права доступа к объектам

Каждый объект, для которого могут быть ограничены права доступа, содержит в своей схеме структуру вида:

"permissions" : {
    "read" : ["@everyone"],
    "write" : ["@admins", "@maintainers"],
    "admin" : ["@admins"],
    "permission_name": ["@group1", "@group2", "user1", "user2"],
 }

Для каждого действия определяются группы и пользователи, которые имеют право на данное действие. Имена групп начинаются с символа @.

Наследование прав

В случае, если объект логически является членом другого объекта (например, версия ОС внутри репозитория), права наследуются от родительского элемента. Право доступа к любому действию может быть переопределено в дочернем элементе. Например:

repository: {
"name": "master",
"owner": "some_user",
"permissions" : {
    "read" : ["@everyone"],
    "write" : ["@maintainers"],
    "admin" : ["@admins"],
    "permission_name": ["@group1", "@group2", "user1", "user2"],
 },
"osversions": [
    {name: "9.0"},
    {name: "8.1", permissions: {write: ["@admins"], admin: ["@admins"]}}
]
}

В таком случае, 9.0 будет иметь такие же права, как и во всем репозитории, а у 8.1 права на write и admin имеет только группа @admins.

Специальные группы

Есть несколько специальных групп:

  • Группа @everyone обозначает любых пользователей, включая незарегистрированных.
  • Группа @admins имеет неограниченные права: все члены этой группы имеют право на любое действие, даже если данная группа явно не указана среди обладателей права.

Владелец

Для объекта может быть определен владелец ("owner"). В качестве владельца может быть указан как конкретный пользователь, так и группа. Владелец обладает неограниченными правами доступа к объекту, наравне с членами группы @admins.

Права доступа к функциям (комплексные действия)

Некоторые действия (например, создание ISO-образов) не ассоциированы с объектами напрямую. В таком случае, проверяется наличие права на данное действие у пользователя, его запросившего.

Права могут быть присвоены как пользователям по отдельности, так и группам. Такие права суммируются: так, если пользователь состоит в нескольких группах, то он обладает правами, которые имеют в сумме обе группы. Кроме того, права пользователя дополняют права групп, в которых он состоит.

Схема прав пользователей и групп

У объекта пользователя или группы набор прав определяется следующей схемой:

permissions: ["permission1", "permission2"]