Назначение привилегий внутри проекта#

Внутри системы все роли системы относятся к «пользовательским», поскольку действия, относимые к категории «административных», внутри системы не доступны ни одной роли.

Пользователь без присвоенных ролей не имеет доступа к инсталляции. При совершении каждого действия в SourceControl происходит проверка, что пользователь имеет нужную роль.

Полномочия для ролей определяются в конфигурационном файле SourceControl. По каждому полномочию в конфигурационном файле указывается, включено данное полномочие для роли или выключено.

Для пользователей с ролью «Пользователь инсталляции» определяются полномочия Создание проектов и Управление группами привилегий.

Совместимость ролей#

Администратор инсталляции может быть добавлен в проект владельцем проекта. Права администратора инсталляции в проекте определяются группой привилегий, назначенной ему в проекте. Если администратору инсталляции в проекте не назначена никакая группа привилегий, то он не является участником проекта и не имеет к нему доступа.

Механизм работы привилегий#

Привилегии группируются в группы привилегий. Группы привилегий могут быть назначены конкретному пользователю в конкретном проекте. Таким образом при выполнении действия в проекте проверяется, какая группа привилегий назначена пользователю в данном проекте и входит ли в эту группу привилегия, нужная для выполнения данного конкретного действия. Группы привилегий выдаются только пользователям, имеющим роль «Пользователь инсталляции». Для администратора инсталляции никакие привилегии не определены, у него нет доступа к проектам. Пользователь, которому не назначена группа привилегий в проекте, не имеет доступа к проекту.

Исключением является группа привилегий Техническая учетная запись (tuz): данная группа привилегий работает на уровне инсталляции, что позволяет выполнять действия на уровне любых содержащихся в инсталляции объектов — тенантов, проектов и репозиториев. Данная группа привилегий не может быть выдана через интерфейс приложения и назначается только администратором инсталляции через CLI-скрипт.

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

  • просмотр групп привилегий;

  • добавление участников в команду;

  • назначение проверяющих на PR;

  • при настройке защиты веток: назначение участников в список тех, кому доступен push;

  • при настройке защиты веток: назначение участников в список тех, чьи отзывы к PR учитываются при подсчете количества;

  • при настройке защиты веток: назначение участников в список тех, кому доступно завершение PR;

  • при настройке тегов: назначение участников в список тех, кому доступно использование тегов.

В SourceControl определены следующие группы привилегий:

  • Техническая учетная запись (tuz) — полномочия соответствуют группе привилегий Владелец проекта;

  • Владелец проекта;

  • Менеджер репозитория;

  • Пользователь с правами на запись;

  • Пользователь с правами на чтение.

Для реализации возможности переключения режима эксплуатации (standalone или в составе Productivity platform), группы и типы привилегий соотнесены следующим образом:

Тип привилегии (rule_type)

Группа привилегий в SourceControl

Техническая учетная запись

a (admin)

Владелец проекта

r (reader)

Менеджер репозитория

w (writer)

Пользователь с правами на запись

x (executor)

Пользователь с правами на чтение

Определены следующие привилегии:

  • Управление пользователями;

  • Изменение настроек проекта;

  • Слияние без ограничений;

  • Чтение приватных репозиториев;

  • Создание репозиториев;

  • Изменение настроек репозиториев;

  • Запись в репозитории;

  • Удаление репозиториев.

Если пользователю в проекте назначена группа привилегий, то при назначении новой группы привилегий в этом проекте он теряет старую группу привилегий. В разных проектах пользователи могут иметь разные группы привилегий.

Система имеет единый общий для всех тенантов перечень групп привилегий, каждой группе присвоен уникальный идентификатор, название и описание.

Все репозитории распределены по проектам, действия над репозиториями определяются группами привилегий, выданными в проектах. Существование репозиториев вне проектов не допускается.

Возможности совершения конкретных действий в репозиториях могут быть донастроены с помощью уникальных привилегий. Уникальные привилегии может назначать пользователь, имеющий в проекте привилегию «Управление пользователями». Если для пользователя не определены никакие уникальные привилегии, то его возможности в репозиториях определяются выданной ему группой привилегий в проекте, к которому относится репозиторий.

Соответствие между группами привилегий и привилегиями:

Владелец проекта / tuz

Менеджер репозитория

Пользователь с правами на запись

Пользователь с правами на чтение

Управление пользователями

+

Изменение настроек проекта

+

Слияние без ограничений

+

Чтение приватных репозиториев

+

Создание репозиториев

+

+

Изменение настроек репозитория

+

+

Чтение публичных репозиториев

+

+

+

+

Запись в репозитории

+

+

+

Удаление репозиториев

+

+

Возможность создания проектов реализована как отдельное полномочие для роли пользователь инсталляции.

Если полномочие выдано, то у пользователей в интерфейсе системы есть возможность создать собственный проект. В созданном проекте пользователь автоматически получает группу привилегий Владелец проекта.

Для возможности комментирования кода (см. Руководство пользователя, раздел Использование приложения) добавлены следующие привилегии:

Владелец проекта / tuz

Менеджер репозитория

Пользователь с правами на запись

Пользователь с правами на чтение

Просмотр комментариев

+
Чтение приватных репозиториев / Чтение публичных репозиториев

+
Чтение приватных репозиториев / Чтение публичных репозиториев

+
Чтение публичных репозиториев

+
Чтение публичных репозиториев

Создание комментариев

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Реакции

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Действия в списке «…»

см. ниже

см. ниже

см. ниже

см. ниже

Завершить диалог (завершить обсуждение)

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Отменить завершение диалога (возобновить обсуждение)

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Начатью ревью

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Действия в блоке «Отредактировано»: «Настройки»

см. ниже

см. ниже

см. ниже

см. ниже

Соответствие групп привилегий привилегии Действия в списке «…»:

Владелец проекта / tuz

Менеджер репозитория

Пользователь с правами на запись

Пользователь с правами на чтение

Копировать ссылку

+
Чтение приватных репозиториев / Чтение публичных репозиториев

+
Чтение приватных репозиториев / Чтение публичных репозиториев

+
Чтение публичных репозиториев

+
Чтение публичных репозиториев

Цитировать ответ

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Редактировать комментарий (свой)

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Редактировать комментарий (чужой)

Удалить комментарий (свой)

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Удалить комментарий (чужой)

+
Управление комментариями

Соответствие групп привилегий привилегии Действия в блоке «Отредактировано»: «Настройки»:

Владелец проекта / tuz

Менеджер репозитория

Пользователь с правами на запись

Пользователь с правами на чтение

Удалить комментарий из истории (свой)

+
Запись в репозитории

+
Запись в репозитории

+
Запись в репозитории

Удалить комментарий из истории (чужой)

+
Управление комментариями

Конкретная привилегия, выдающая права на действия, указана в таблице рядом с символом +.

Для реализации возможности владельца проекта управлять комментариями участников проекта с помощью функций, недоступных для пользователей с привилегией Запись в репозиторий (у пользователей из группы Пользователи с правами на запись), реализована новая привилегия Управление комментариями (manage_comments). Привилегия доступна только для пользователей, состоящих в группе привилегий Владелец проекта (owner).

Привилегия Управление комментариями (manage_comments) выдает полномочия к следующим действиям:

  • Удаление чужие комментариев;

  • Удаление истории чужих отредактированных комментариев.

Просмотр и назначение групп привилегий в проекте#

Для пользователя с ролью Пользователь инсталляции настраивается отдельное полномочие Управление группами привилегий.

Если пользователю в проекте выдана привилегия Управление пользователями, то внутри проекта ему доступен раздел Группы привилегий — раздел содержит сведения, каким пользователям назначены какие группы привилегий в проекте.

Если у пользователя нет полномочия Управление группами привилегий, то интерфейс Группы привилегий выводится в режиме только для чтения. Если у пользователя есть полномочие Управление группами привилегий, то в интерфейсе Группы привилегий есть элементы для добавления новых пользователей в проект и редактирования групп привилегий у пользователей, уже добавленных в проект.

Перечень участников проекта

Пользователь, которому назначена группа привилегий Владелец проекта, отмечается отдельной иконкой. Пользователь не может редактировать собственные группы привилегий.

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

По каждому пользователю выводится фото, ФИО и логин.

Добавление участника: выбор из списка

Выбор пользователя осуществляется по клику на область всплывающего окна, относящуюся к пользователю. При выборе пользователя во всплывающем окне отображается фото, ФИО и логин выбранного пользователя, а также элемент назначения ему группы привилегий.

Добавление выбранного участника и назначение группы привилегий

Когда задана группа привилегий, во всплывающем окне становится активной кнопка сохранения. При сохранении выбранный пользователь получает выбранную группу привилегий в проекте, всплывающее окно закрывается, таблица пользователей отображает обновленные данные.

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

Также при редактировании пользователя во всплывающем окне выводится кнопка удаления.

Кнопка удаления пользователя

При нажатии выводится окно подтверждения действия.

Всплывающее окно «Запрос подтверждения удаления»

При нажатии Удалить пользователь будет удален из проекта (лишен какой-либо группы привилегий в проекте). Всплывающее окно закрывается, таблица пользователей отображает обновленные данные.

При нажатии Отменить окно закрывается без внесения каких-либо изменений.

Проверка наличия привилегий#

При выполнении пользователем действий в проекте проверяется наличие у пользователя соответствующей привилегии. Наличие привилегии определяется проверкой, входит ли привилегия в группу привилегий, назначенную пользователю в проекте.

Привилегии доступа к репозиториям определяют доступ для общих случаев, когда пользователь добавлен в проект, но для него не настроен какой-либо доступ на уровне репозитория.

Доступ на уровне репозитория определяется выданными уникальными привилегиями.

В зависимости от привилегий, выданных пользователю через группы привилегий, есть отличия в отображении интерфейсов SourceControl:

Привилегии

Интерфейсы SourceControl

Описание

Управление пользователями

Страница проекта:
Отображение вкладки «Группы привилегий» при наличии привилегии «Управление пользователями»

Если привилегия выдана, то на странице проекта выводится вкладка Группы привилегий

Настройки проекта

Отображение кнопки «Настройки» при наличии привилегии «Настройки проекта»

Если привилегия выдана, то на странице проекта выводится кнопка Настройки

Слияние без ограничений

Отображение виджета активности в репозитории при наличии привилегий

Если привилегия выдана, то на странице настроек защиты веток в репозитории выводится опция, позволяющая включить возможность слияния независимо от настроенных условий

Чтение приватных репозиториев

Чтение публичных репозиториев

Виджет активности в репозиториях на главной странице:
Просмотр истории действий в репозитории при наличии привилегий

История действий в репозиториях на главной странице
Отображение вкладки «Репозиторий» при наличии привилегий

Вкладка «Репозиторий» на главной странице:
Отображение списка репозиториев при наличии привилегий

Список репозиториев в разделе «Обзор»:
Отображение списка репозиториев в разделе «Обзор» при наличии привилегий

Во всех перечисленных интерфейсах:
* если есть привилегия Чтение приватных репозиториев, то выводятся в том числе приватные репозитории
* если есть привилегия Чтение публичных репозиториев, то выводятся в том числе публичные репозитории

Создание репозиториев

Страница проекта, вкладка «Репозитории»:
Возможность создания новых репозиториев при наличии привилегии «Создание репозиториев»

Если привилегия выдана, то на странице проекта, на вкладке «Репозиторий» выводится кнопка Новый репозиторий

Изменение настроек репозиториев

Страница репозитория:
Отображение кнопки «Настройки» при наличии привилегии «Изменение настроек репозиториев»

Если привилегия выдана, то на страницах репозитория выводится кнопка Настройки

Запись в репозитории

Кнопки редактирования/удаления файла при просмотре файла:
Отображение кнопок редактирования/удаления файла при наличии привилегии «Запись в репозитории»

Кнопка создания запроса на слияние при просмотре ветки:
Отображение кнопки создания запроса на слияние при наличии привилегии «Запись в репозитории»

Если привилегия выдана, то доступны кнопки редактирования, удаления файла, кнопка создания запроса на слияние

Удаление репозиториев

Блок «критичных» настроек на странице настроек репозитория:
Отображение блока критичных настроек при наличии привилегии «Удаление репозиториев»

Если привилегия выдана, выводится кнопка Удалить этот репозиторий, выводится кнопка Архивировать репозиторий

При обращении пользователя по прямой ссылке к страницам, к которым нет доступа из-за отсутствия необходимых привилегий, выводится страница 404.

Отображение страницы с ошибкой 404

При запросе пользователем действий, к которым нет доступа из-за отсутствия привилегий, возвращается отрицательный результат операции.

Создание проектов#

Для пользователей с ролью Пользователь инсталляции настраивается отдельное полномочие Создание проектов.

Если у пользователя есть полномочие Создание проектов, то в перечисленных интерфейсах пользователю доступна функциональность создания нового проекта.

При создании проекта пользователю автоматически присваивается группа привилегий Владелец проекта в этом проекте.

Если у пользователя нет полномочия Создание проектов, то пользователь не имеет возможности создавать проекты.

Создание проектов доступно в следующих интерфейсах:

Интерфейс создания нового проекта в меню переключения контекста

В меню переключения контекста, на главной странице

Интерфейс создания нового проекта на главной странице

На вкладке Проект на главной странице

Интерфейс создания нового проекта в меню создания новых объектов

В меню создания новых объектов.
Выводится на всех страницах

Интерфейс создания нового проекта через пользовательское меню «Настройки» в разделе «Проекты»

В пользовательском меню пункт Настройки, раздел Проекты

Доступ к репозиториям#

В SourceControl отключена возможность создания публичных проектов: в интерфейсе создания проекта недоступен вариант видимости «Публичная», при запросе создания такого проекта возвращается ошибка: «Публичные проекты недоступны».

Реализованы следующие варианты видимости проектов:

  • Ограниченная:

    • Публичный;

    • Приватный;

  • Приватная:

    • Публичный;

    • Приватный.

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

  • Неавторизованный пользователь: отсутствует доступ ко всем уровням видимости проекта.

  • Авторизованный пользователь:

    • Проект с видимостью Ограниченная > Публичный: есть доступ уровня привилегии Чтение публичных репозиториев. Реализуется добавлением проекта в группу проектов InnerSource в Casbin.

    • Доступ к проектам с другой видимостью отсутствует.

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

  • Пользователь с уникальными привилегиями в репозитории: доступ определяется уникальными привилегиями в репозитории.

Доступ пользователя к элементам репозиториев при наличии группы привилегий в проекте#

Доступ к элементам репозитория (Код, Задачи, Запросы на слияние, Релизы, Вики, Проекты, Пакеты, Действия) предоставляется в соответствии с выданными привилегиями:

Привилегия в проекте

Доступ

Чтение публичных репозиториев

Чтение, если репозиторий публичный

Чтение приватных репозиториев

Чтение, если репозиторий приватный

Запись в репозитории

Запись