Перейти к основному содержимому

03. Приоритеты контекстов

В процессе вычисления прав доступа требуется согласовать разные контексты, которые могут пересекаться по области действия (по объектам доступа). Например, согласование контекстов требуется для формулирования прав доступа “Разрешить все атласы кроме этих двух”.

Процесс согласования происходит либо внутри персональных прав доступа либо внутри групповых прав доступа.

к сведению

Процесс согласования контекстов между персональными правами доступа и групповыми правами доступа не происходит.

Области действия контекстов

ключзначениеинтерпретация
schema_name*все атласы (имя схемы ds_*)
schema_name=Атлас, которым владеет пользователь
schema_nameстрокаимя схемы (конкретное значение)
table_namenullвсе таблицы
table_nameстрокаимя таблицы (конкретное значение)
object_idnullвсе объекты (все записи)
object_id=объект, привязанный к пользователю
object_idчислообъект, с указанным id (конкретное значение)
осторожно

В целях безопасности, нельзя сформулировать выражение “Любая таблица в любой схеме”, так как отсутствует возможность использовать null для имени схемы.

Зависимые контексты

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

СхемаТаблицаid запсисиправа доступа
*nullnull{"R":false}
=nullnull{"R":true}
ds_12nullnull{"R":false}
ds_12dashletsnull{"R":true}
ds_12dashlets12{"R":false}

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

При движении от самых общих контекстов к частным должны меняться права доступа (чередование true/false), иначе в подобных правилах нет смысла.

Набор таких правил согласовывается на каждом уровне отдельно, например в персональных правах или в групповых правах сопоставляются правила со схемой *, затем = и далее для каждого уникального имени атласа.

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

Например, в нашем примере действие R для ds_12.dashlets/12 запрещено, а действие R для ds_12.dashlets/33 разрешено.

Примеры взаимодействия персональных и групповых прав доступа

Персональный доступ на все дэшборды

// персонально
{
"schema_name": '*',
"table_name": "dashboards",
"object_id": null,
"rights": {"R":true}
}

// групповые
{
"schema_name": "ds_20",
"table_name": "dashboards",
"object_id": null,
"rights": {"R":false}
}

В примере персональными правами разрешён доступ ко всем дэшбордам в любом атласе, запреты в группе не имеют силы, так как имеют приоритет ниже, чем персональные права.

подсказка

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

Персональный запрет на все дэшборды

// персонально
{
"schema_name": '*',
"table_name": "dashboards",
"object_id": null,
"rights": {"R":false}
}

// групповые
{
"schema_name": "ds_20",
"table_name": "dashboards",
"object_id": null,
"rights": {"R":true}
}

В примере персональными правами запрещён доступ ко всем дэшбордам в любом атласе, разрешения в группе не имеют силы, так как имеют приоритет ниже, чем персональные права.

Доступ на все объекты, кроме указанных

// персонально
{
"schema_name": "ds_20",
"table_name": "dashboards",
"object_id": null,
"rights": {"R":false}
}

// групповые
{
"schema_name": '*',
"table_name": "dashboards",
"object_id": null,
"rights": {"R":true}
}

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

Разрешение на операцию, которое можно отменить через группу.

Если разрешение выдано в сайтовой роли, то его можно отменить в персональных или групповых правах доступа.

осторожно

Запрет, установленный в сайтовой роли действует немедленно и не может быть отменён через персональные или групповые права!

// сайтовая роль разрешает закачивать в систему ресурсы
// в атласы, которые принадлежат пользователю
{
"schema_name": "=",
"table_name": "resources",
"object_id": null,
"rights": {"C":true,"Imp":true}
}

// в группе, на тот же контекст выставлен запрет,
// и он перекрывает разрешения, выданные в сайтовой роли.
{
"schema_name": '=',
"table_name": "resources",
"object_id": null,
"rights": {"C":false,"Imp":false}
}