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

Когда пользователь пытается получить доступ к ресурсу, AggreGate Server просматривает его таблицу прав доступа построчно, начиная с самой первой (верхней).

Если путь контекста ресурса, к которому пользователь пытается получить доступ, совпадает или продолжает маску контекста, определенную в текущей строке таблицы прав, уровень прав доступа в этой строке будет эффективным уровнем прав доступа для этого пути. Как только совпадающая строка найдена, другие строки не проверяются на совпадение. Так, например, если вы начинаете таблицу с контекстом * (т.е. первая строка в таблице), другие строки не будут проверяться, потому что эта строка совпадает со всеми контекстами. Именно по этому контекст * всегда является последней строкой в таблице.

Требуемый уровень прав доступа, определенный на предыдущем шаге, сравнивается с уровнем прав доступа, запрашиваемым ресурсом, к которому осуществляется доступ. Если эффективный уровень включает уровень прав доступа источника, доступ будет разрешен. Иначе, в доступе будет отказано.

Если контекстный путь запрашиваемого ресурса не соответствует или не расширяет любую маску в таблице, эффективный уровень прав доступа запрашиваемого ресурса определяется последней строкой в таблице прав доступа, потому что она всегда определяет уровень прав доступа для всех контекстов (Маска контекста *).

Пример 1

Предположим, что таблица прав доступа пользователя john выглядит следующим образом:

Строка

Маска контекста

Права доступа

1

users.test

Менеджер

2

users.*

Не определен

3

*

Менеджер

  1. John пытается получить доступ к

users.abc.alerts. Необходимый уровень прав для данного ресурса является Менеджер. Первая строка таблицы, users.test, не совпадает и не продолжает маску users.abc.alerts, поэтому мы переходим ко второй строке users.*, и видим, что она продлевает users.test. Данная вторая строка задает Не определен в качестве уровня прав доступа, и поэтому доступ будет запрещен.

  1. John пытается получить доступ к

event_filters.filter1, требующий уровень прав доступа Менеджер.  Эффективный уровень прав доступа для event_filters.filter1 будет определен третьей строкой в таблице, и, таким образом, доступ будет запрещен.

  1. John пытается получить доступ к

users.test.queries, требующий уровень прав доступа Администратор. Его эффективный уровень для этого контекста определяется первой строкой в таблице. Он будет уровнем Менеджер (ниже, чем Администратор), и, таким образом, доступ к users.test.queries будет запрещен.

Пример 2

Таблица прав доступа администратора по умолчанию:

Строка

Маска контекста

Права доступа

1

*

Admin

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

Окно отказа в доступе

Если прав доступа пользователя недостаточно для осуществления требуемой операции, в доступе будет отказано, и появится сообщение об ошибке "Нет прав".

Временное отключение доступа к некоторым объектам

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

Пример

John, пользователь из последнего примера, имеет контекст Тревоги, users.john.alerts. Данный путь существует всегда. Изначально John может получить доступ к его Тревогам, потому что это позволяет Права доступа пользователя по умолчанию. Он входит на AggreGate Server и создает тревогу alert1. Затем администратор настраивает таблицу прав доступа John'а так, чтобы он больше не смог видеть его контекст Тревоги (например, добавив запись с Маской контекста users.john.alerts и Уровнем прав доступа Не определен в начало таблицы). Это не удалит alert1 и даже не прекратит ее работу. Некоторые пользователи AggreGate Server все еще имеют доступ к этой тревоге и смогут конфигурировать и контролировать ее. Как только администратор разрешает John'у получить доступ к его тревогам, alert1 снова появится в его контексте Тревоги.