当前位置: 首页 > 知识库问答 >
问题:

Liferay 7.0获得通过群体继承的角色

龙华翰
2023-03-14

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

我创建了一个组mygroup和一个角色mygrouprole,将用户分配给mygroup,并将mygroup分配给mygrouprole。当我点击一个用户时,我可以看到他们继承了mygrouprole。

从我的jsp页面,我调用com。麦可。UserUtil。hasRole(长用户ID,字符串角色)

当用户被直接分配到角色,但不是通过一个组传递时,这种方法可以很好地工作。

 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个答案

宇文飞羽
2023-03-14

我本以为会有一种更简单/更干净的方法来做到这一点,也许这是存在的,但我已经找到了一个解决办法。

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

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

 类似资料:
  • 问题内容: 在我的页面上,我正在通过JavaScript更改某些CSS样式。当我尝试提取一个已继承的值时-它变成空白。考虑以下: 和html: 如果我查看元素’ document.getElementById(objname).style.display ‘其空白?如何通过javascript读取显示值? 问题答案: 您将要使用getComputedStyle。 该属性是访问和设置内联样式的方式(

  • 如何使用注释在Spring中提供bean继承?在XML配置中,我使用了

  • 问题内容: 假设我有三节课: 当我创建类C的实例时,它将调用超类的构造函数。那么,是否有多个对象正在创建?如果仅创建一个对象,那么super()像另一个类的构造函数如何?super()方法是否在内部创建对象?我所知道的是,构造函数也是一种方法(我可能错了)。 我的问题是: 在这种情况下创建了多少个对象? 如果创建了一个对象,那么Super()如何在内部调用父类的构造函数? 问题答案: 好问题。您要

  • 问题内容: 我试图弄清楚如何通过可能与“ co” 一起获得承诺的价值: 调用的函数不是生成器,而是普通函数。有了上面的,但是我想要解析的值。是否合作或其他一些库有这样做的方法吗? 问题答案: 是的, 公司 可以做到。您必须在调用中包装父函数: 内在将成为解决价值。如果承诺被拒绝,则可以通过基本声明来纠正错误。

  • 我使用 SharePoint Online 驱动器(文档库)和 Microsoft Graph API( 调用)。使用此API,我可以下载/上传文件,但无法使用权限。 这不成问题——我可以用SharePoint Online REST API(用calls < code > _ API/web/GetListByTitle(' Title ')/hasuniqueroleossignations

  • 问题内容: 我正在尝试通过Java中的以下命令启动脚本: 在控制台中键入的命令可以正常工作。但是在这里,即使将路径添加到$ PATH变量中,也似乎找不到该脚本。如果将null传递为Environment,Java不会自动继承所有此类变量吗? 问题答案: 应该