【问题标题】:Liferay 7.0 Get Roles Inherited Through GroupsLiferay 7.0 获取通过组继承的角色
【发布时间】:2018-10-21 23:28:21
【问题描述】:

我正在努力寻找任何方法来检索通过组继承的角色。

我创建了一个组 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 找不到任何角色

【问题讨论】:

    标签: liferay roles liferay-7


    【解决方案1】:

    我本来希望有一种更简单/更清洁的方法来做到这一点,也许存在,但我找到了一种解决方法。

    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) {
            ...
        }
    }
    

    基本上,我将直接分配给用户的角色列表和分配给任何用户组的角色组合在一起,然后在该列表中搜索指定的角色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 2020-04-19
      相关资源
      最近更新 更多