Liferay 7.0 Получить роли, унаследованные через группы - PullRequest
0 голосов
/ 11 мая 2018

Я изо всех сил пытаюсь найти способ извлечь роли, унаследованные через группы.

Я создал группу, mygroup и роль mygrouprole, назначил пользователей mygroup и назначил mygroup mygrouprole.Когда я нажимаю на пользователя, я вижу, что он унаследовал mygrouprole.

На моей странице jsp я звоню com.myco.UserUtil.hasRole(Long userId, String role).

Это прекрасно работает, когда пользователь назначен непосредственно на роль., но не транзитивно через группу.

 public static boolean hasRole(Long userID, String role) {
        boolean blnFound = false;
        try {

            List<Role> lstRoles = RoleServiceUtil.getUserRoles(userID);
            m_logger.info("RoleServiceUtil.getUserRoles");
            for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
                Role rlRole = iterator.next();
                m_logger.info(rlRole.getName());
                if (rlRole.getName().equals(role)) {
                    blnFound = true;
                    m_logger.debug("User " + Long.toString(userID) + " has role " + role);
                    break;
                }
            }
        } catch (Exception e) {
            ...
        }
}

До сих пор я пробовал несколько альтернативных функций, но ни одна из них, похоже, не в состоянии найти роль.

public static boolean hasRole(Long userID, String role) {
        boolean blnFound = false;
        try {

            List<Role> lstRoles = RoleServiceUtil.getUserRoles(userID);
            m_logger.info("RoleServiceUtil.getUserRoles");
            for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
                Role rlRole = iterator.next();
                m_logger.info(rlRole.getName());
                if (rlRole.getName().equals(role)) {
                    blnFound = true;
                    m_logger.debug("User " + Long.toString(userID) + " has role " + role);
                    break;
                }
            }

            lstRoles = RoleLocalServiceUtil.getUserRoles(userID);
            m_logger.info("RoleLocalServiceUtil.getUserRoles");
            for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
                Role rlRole = iterator.next();
                m_logger.info(rlRole.getName());
                if (rlRole.getName().equals(role)) {
                    blnFound = true;
                    m_logger.debug("User " + Long.toString(userID) + " has role " + role);
                    break;
                }
            }

            lstRoles = RoleLocalServiceUtil.getUserRelatedRoles(userID,CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId());
            m_logger.info("RoleLocalServiceUtil.getUserRelatedRoles");
            for (Iterator<Role> iterator = lstRoles.iterator(); iterator.hasNext();) {
                Role rlRole = iterator.next();
                m_logger.info(rlRole.getName());
                if (rlRole.getName().equals(role)) {
                    blnFound = true;
                    m_logger.debug("User " + Long.toString(userID) + " has role " + role);
                    break;
                }
            }

            List<UserGroupRole> lstUGRoles = UserGroupRoleLocalServiceUtil.getUserGroupRoles(userID);
            m_logger.info("UserGroupRoleLocalServiceUtil.getUserGroupRoles");
            for (Iterator<UserGroupRole> iterator = lstUGRoles.iterator(); iterator.hasNext();) {
                UserGroupRole rlRole = iterator.next();
                m_logger.info(rlRole.getRole().getName());
                if (rlRole.getRole().getName().equals(role)) {
                    blnFound = true;
                    m_logger.debug("User " + Long.toString(userID) + " has role " + role);
                    break;
                }
            }

            blnFound = UserGroupRoleLocalServiceUtil.hasUserGroupRole(
                userID,
                // TODO: this only works when there is one company
                CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
                role
            );
            m_logger.info("UserGroupRoleLocalServiceUtil.hasUserGroupRole:"+Boolean.toString(blnFound));

            blnFound = UserGroupRoleLocalServiceUtil.hasUserGroupRole(
                userID,
                // TODO: this only works when there is one company
                CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
                role,
                true
            );
            m_logger.info("UserGroupRoleLocalServiceUtil.hasUserGroupRole:"+Boolean.toString(blnFound));

            blnFound = RoleLocalServiceUtil.hasUserRole(
                userID,
                // TODO: this only works when there is one company
                CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
                role,
                true
            );
            m_logger.info("RoleLocalServiceUtil.hasUserRole:"+Boolean.toString(blnFound));

            blnFound = RoleLocalServiceUtil.hasUserRoles(
                userID,
                // TODO: this only works when there is one company
                CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID)).getGroup().getGroupId(),
                new String[] {role},
                true
            );
            m_logger.info("RoleLocalServiceUtil.hasUserRoles:"+Boolean.toString(blnFound));
} catch (Exception e) {
            ...
        }
}

UserGroupRoleLocalServiceUtil.getUserGroupRoles не находит никаких ролей

1 Ответ

0 голосов
/ 11 мая 2018

Я бы ожидал более простой / понятный способ сделать это, возможно, он существует, но я нашел обходной путь.

public static boolean hasRole(Long userID, String role) {
    boolean blnFound = false;
    try {

        // Get a list of all the roles directly assigned to a user
        List<Role> userRoles = RoleServiceUtil.getUserRoles(userID);

        // Get a list of all the user's groups and add any assigned roles to the role list
        List<UserGroup> userGroupList = UserGroupLocalServiceUtil.getUserUserGroups(userID);
        for (Iterator<UserGroup> iterator = userGroupList.iterator(); iterator.hasNext();) {
            UserGroup group = iterator.next();
            m_logger.trace(group.getName());
            userRoles.addAll(RoleLocalServiceUtil.getGroupRoles(group.getGroupId()));
        }

        // Check to see if the role is in the list
        for (Iterator<Role> iterator = userRoles.iterator(); iterator.hasNext();) {
            Role rlRole = iterator.next();
            m_logger.debug(rlRole.getName());
            if (rlRole.getName().equals(role)) {
                blnFound = true;
                m_logger.debug("User " + Long.toString(userID) + " has role " + role);
                break;
            }
        }
    } catch (Exception e) {
        ...
    }
}

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

...