null

Liferay - получение данных о пользователе из JSF-портлета

В одной из предыдущих статей мой коллега рассказал о способах получения пользовательской информации из обычного Liferay портлета. Сегодня мы посмотрим, как можно получить аналогичную информацию из JSF-портлета.
 
Самый простой способ - использовать Liferay Faces. В таком случае у нас есть ViewScoped-bean liferay, в котором определены методы для получения пользовательских данных, themeDisplay и многого другого. Liferay бин можно использовать из jsf-страниц напрямую, обращаясь к нему по имени liferay. Чтобы получить доступ к Liferay-бину из пользовательских бинов, его нужно инъектировать:
@ManagedBean(name = "liferayTestUtilBean")
@RequestScoped
public class LiferayTestUtilBean {
    
    @ManagedProperty(value="#{liferay}")
    Liferay liferayBean;

    public boolean isAdmin() {
        ThemeDisplay td = liferayBean.getThemeDisplay();
        PermissionChecker permissionChecker = td.getPermissionChecker();
        return permissionChecker.isOmniadmin();
    }

    public User getCurrentUser() {
        return liferayBean.getUser();
    }

    public Liferay getLiferayBean() {
        return liferayBean;
    }

    public void setLiferayBean(Liferay liferayBean) {
        this.liferayBean = liferayBean;
    }
}
 
Если вы не хотите использовать Liferay Faces, можно получить пользовательскую информацию с помощью FacesContext. Для получения themeDisplay в JSF-бине нужно добавить следующие строки:
ThemeDisplay themeDisplay = 
    (ThemeDisplay) FacesContext.getCurrentInstance()
        .getExternalContext().getRequestMap()
        .get(WebKeys.THEME_DISPLAY);
 
С помощью themeDisplay мы имеем возможность получить информацию о пользователе:
User user = themeDisplay.getUser();
 
его ролях и правах:
List<Role> roles = RoleServiceUtil.getUserRoles(userId);
PermissionChecker permissionChecker = getThemeDisplay()
    .getPermissionChecker();
permissionChecker.isOmniadmin();