5.11. Система прав NextGIS Web

Механизм управления правами - один из ключевых механизмов NextGIS Web. Основной сущностью в NextGIS Web являются ресурсы, на их уровне и осуществляется управление правами.

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

5.11.1. Права и категории прав

Право (permission) - это возможность выполнять те или иные действия с ресурсом. Например, право “Чтение” (read) позволяет получать ключевую информацию о ресурсе, к примеру его наименование; право “Изменение” (update) - позволяет эту информацию изменять. В целях удобства права сгруппированы в категории прав (permission scope). Приведенные выше примеры прав чтения и изменения относятся к основной категории прав “Ресурс” (Resource), но есть и другие категории, такие как “Метаданные”, “Структура данных” или “Данные”.

5.11.2. Списки контроля доступа и правила

Управление правами осуществляется через изменение списков контроля доступа (access control list, ACL), привязанных к ресурсам. Во многом это аналогично тому как осуществляется управление правами в ОС Windows и Unix-подобных (POSIX ACL). Однако, возможных действий и операций с ресурсами больше чем в файловой системе, поэтому прав больше, и они сгруппированы в категории.

Список контроля доступа состоит из правил (rule), которые обладают следующими атрибутами:

  • Действие (action) - “Разрешить” (allow) или “Запретить” (deny).

  • Субъект (principal) - пользователь или группа пользователей, к которому это правило применяется.

  • Право (permission) - право или категория прав, разрешаемая или запрещаемая правилом.

  • Распространять (propagate) - флаг, определяющий, распространять ли право на вложенные ресурсы (да или нет).

  • Ресурс (resource) - тип ресурса, к которому это правило применяется.

Независимо от того, находится ли правило в начале или в конце списка, вначале применяются правила с действием «Разрешить» и потом правила «Запретить». Другими словами правила «Запретить» имеют более высокий приоритет, чем правила “Разрешить”, а расположение правила в списке не играет никакой роли.

В качестве субъекта может быть указана группа пользователей, например группа “Редакторы”, в результате правило будет применяться только для пользователей - членов группы “Редакторы”.

Кроме групп, создаваемых администратором, в системе есть специальные системные группы пользователей:

  • Администраторы - группа, пользователи которой обладают административными правами

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

Добавление пользователей в эти группы - удобный способ быстро назначить необходимые права в рамках всей системы. Удалить эти группы нельзя.

Также в качестве субъекта может быть указан конкретный пользователь, в этом случае правило будет применяться только к нему.

Также в NextGIS Web предусмотрен ряд виртуальных системных пользователей для использования в списках контроля доступа:

  • Прошедший проверку (Authenticated) - правило будет применено к любому аутентифицированному (вошедшему в NGW) пользователю.

  • Гость (Guest) - правило будет применено к не аутентифицированному пользователю.

  • Любой пользователь (Everyone) - правило будет применено к любому (аутентифицированному или нет) пользователю.

  • Владелец (Owner) - право будет применено к пользователю создавшему ресурс (владельцу).

Если установлен флаг Распространять, правило применяется не только к ресурсу, для которого оно указано, но и ко всем дочерним ресурсам. Атрибут Ресурс позволяет ограничить применение правил к определенным типам ресурсов, на практике имеет смысл только при включенном флаге “Распространять”.

5.11.3. Зависимости между правами

Ситуация, когда у пользователя есть возможность изменения наименования ресурса, но нет права чтения этого наименования, достаточно странная и приводит к неконсистентному поведению системы в целом. Для того чтобы избежать этой проблемы в NextGIS Web существуют зависимости между правами.

Например, право “Изменение” зависит от права “Чтение”. Даже если для пользователя есть правило, “разрешающее” ему право “Изменение”, но нет правила, разрешающего право “Чтение”, то воспользоваться правом “Изменение” у пользователя все равно не получится, право “Изменение” будет замаскировано правом “Чтение”. На практике большинство прав ресурса зависят как минимум от права “Чтение”.

Также существуют зависимости между между правами связанных между собой ресурсов. Рассмотрим на примере иерархии файловой системы, допустим имеется иерархия в файловой системе: директория 1 > директория 2 > файл.

В этой иерархии пользователю может быть дано право прочитать файл, но если у него не будет возможности перейти в директорию 1, а затем в директорию 2 - прочитать файл у него возможности не будет.

Похожее поведение в NextGIS Web реализовано при помощи зависимости права “Чтение” дочернего ресурса от права “Чтение” родительского ресурса.

Предупреждение

Таким образом, если вы не назначили право “Чтение” ресурсу в NGW, то абсолютно не важно, какие права вы назначили ресурсам внутри этой папки - они не вступят в силу.

5.11.4. Вычисление эффективных прав

Допустим, пользователь собирается выполнить ту или иную операцию над ресурсом, например - прочитать его наименование. При обращении, например через API, NextGIS Web выполняет вычисление эффективных прав - набора прав, которым пользователь обладает по отношению к конкретному ресурсу. Вычисление выполняется в следующей последовательности:

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

  2. Применяются правила ресурса и правила родительских ресурсов с флагом “Распространять”.

  3. Вначале применяются правила “Разрешить” - права из них добавляются к вычисляемому набору прав.

  4. После этого применяются правила “Запретить” - права из них вычитаются из вычисляемого набора прав.

  5. Проверяются зависимости - права с неудовлетворенными зависимостями отмечаются как замаскированные.

В результате получается набор эффективных прав пользователя - прав, которые разрешены, не запрещены и не замаскированы по зависимостям. На основании этого набора NextGIS Web принимает решение о авторизации выполнения того или иного действия, как в API, так и веб-интерфейсе.