6.2.6.2. Атрибуты сессии
Группа доступа может определять список атрибутов сессии для пользователей, входящих в данную группу. Эти атрибуты можно использовать в коде приложения и при настройке ограничений.
В пользовательскую сессию при входе в систему будут помещены все атрибуты, заданные для группы, в которой находится пользователь, и для всех родительских групп вверх по иерархии. При этом если атрибут встречается в иерархии групп несколько раз, значение он получит от самой верхней группы, то есть переопределение значений атрибутов на нижнем уровне невозможно. При попытке переопределения в журнал сервера будет выведено сообщение с уровнем WARN
.
Атрибуты сессии могут быть заданы вместе с ограничениями в классе, используемом для задания группы доступа. Класс должен быть расположен в модуле core
. Ниже приведен пример группы доступа, которая определяет атрибут accessLevel
со значением 1
:
@AccessGroup(name = "Level 1", parent = RootGroup.class)
public class FirstLevelGroup extends AnnotatedAccessGroupDefinition {
@SessionAttribute(name = "accessLevel", value = "1", javaClass = Integer.class)
@Override
public Map<String, Serializable> sessionAttributes() {
return super.sessionAttributes();
}
}
Атрибуты сессии могут быть также заданы во время работы приложения с помощью экрана Access Groups: выберите группу и перейдите на вкладку Session Attributes.
Получить атрибут сессии в коде приложения можно с помощью объекта UserSession
:
@Inject
private UserSessionSource userSessionSource;
...
Integer accessLevel = userSessionSource.getUserSession().getAttribute("accessLevel");
Использовать атрибут в ограничениях можно, указав его в параметре JPQL с префиксом session$
:
{E}.accessLevel = :session$accessLevel