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

如何在Liferay 6.1中获得网站角色的所有用户?

秦阳旭
2023-03-14

我已将LDAP导入的用户组映射到站点角色(因为Liferay 6.1不可能将它们映射到组织角色)。

例如,我已经将用户组my_site管理员映射到站点my_site的站点角色站点管理员。

如何让网站角色的所有用户也考虑到用户组成员身份?

我尝试了以下代码,但没有成功。

Set<User> siteMembers = new HashSet<User>();
Group group = GroupLocalServiceUtil.getGroup(layout.getGroupId());
Integer[] types = new Integer[]{Integer.valueOf(2)}; //site roles
List<Role> siteRoles = RoleLocalServiceUtil.search(group.getCompanyId(), null, types, 0, 10, null);
Set<UserGroupRole> siteUserGroupRoles = new HashSet<UserGroupRole>();

for (Iterator<Role> iterator = siteRoles.iterator(); iterator.hasNext();) {
    Role siteRole = (Role) iterator.next();
    List<UserGroupRole> userGroupRoles = UserGroupRoleLocalServiceUtil.getUserGroupRolesByGroupAndRole(group.getGroupId(), siteRole.getRoleId());
    siteUserGroupRoles.addAll(userGroupRoles);
}
for (Iterator<UserGroupRole> it1 = siteUserGroupRoles.iterator(); it1.hasNext();) {
    UserGroupRole userGroupRole = (UserGroupRole) it1.next();
    User userGroupUser = userGroupRole.getUser();
    siteMembers.add(userGroupUser);
}

共有2个答案

颜修真
2023-03-14

当我们将任何站点角色与用户关联时,关联将存储在UserGroupRole表中。当我们想要获取站点角色时,我们必须使用相应的服务类来访问这些角色,就像我们需要使用UserGroupRoleLocalService一样。java类在那里我们可以找到许多服务方法。

UserGroupRoleLocalServiceUtil。getUserGroupRolesByGroupAndRole(主题显示。getScopeGroupId(),监管者角色)。getRoleId());

然后可以从UserGroupRole对象获取userId。

芮建茗
2023-03-14

最终找到了以下解决方案:

Set<User> siteMembers = new HashSet<User>();
Group group = GroupLocalServiceUtil.getGroup(layout.getGroupId());
long groupId = group.getGroupId();
Integer[] types = new Integer[]{Integer.valueOf(2)}; //site roles
List<Role> siteRoles = RoleLocalServiceUtil.search(group.getCompanyId(), null, types, 0, 10, null);
Set<UserGroupGroupRole> siteUserGroupGroupRoles = new HashSet<UserGroupGroupRole>();

for (Iterator<Role> iterator = siteRoles.iterator(); iterator.hasNext();) {
    Role siteRole = (Role) iterator.next();
    List<UserGroupGroupRole> userGroupGroupRoles = UserGroupGroupRoleLocalServiceUtil.getUserGroupGroupRolesByGroupAndRole(groupId, siteRole.getRoleId());
    siteUserGroupGroupRoles.addAll(userGroupGroupRoles);
}
for (Iterator<UserGroupGroupRole> it1 = siteUserGroupGroupRoles.iterator(); it1.hasNext();) {
    UserGroupGroupRole userGroupGroupRole = (UserGroupGroupRole) it1.next();
    long userGroupId = userGroupGroupRole.getUserGroupId();
    List<User> userGroupUsers = UserLocalServiceUtil.getUserGroupUsers(userGroupId);
    siteMembers.addAll(userGroupUsers);
}
siteMembers.addAll(UserLocalServiceUtil.getGroupUsers(groupId));

这似乎并不直接。我希望有一种方法可以通过站点角色用户组用户映射获取所有站点成员,甚至是间接成员。

我必须分别获取属于所有用户组的所有用户,这些用户组与该站点有站点角色关联,此外,还必须获取所有直接加入该站点的用户。

任何其他更直接的解决方案都是受欢迎的。

 类似资料:
  • 我搜索了以下内容:,但没有找到任何内容。 JDA版本:

  • 我想知道为用户分配的站点角色名称列表。所以我试着如下, 我只能看到用户的常规类型角色。不是网站类型。但在我的情况下,用户是网站管理员。那么如何使用api调用获取用户的站点角色名称呢?

  • 我在一个有这种结构的拉威尔项目中工作 用户:id | first | u name |。。。 角色:id|name 分配的角色:id |用户id |角色id 我认为这是很明显的:p 用户模型 角色模型 我正在寻找一种方法来获取所有具有指定角色(在本例中为“教师”)的用户。我试过这个: 但这总是返回一个包含所有用户的数组。 有人知道为什么会这样吗?谢谢

  • 亲爱的人们。 最近,我开始更多地使用Laravel模型和雄辩的关系,而不是编写原始查询。 问题:我无法访问表“roles”的任何字段变量。$user->roles->role_name或role_description。

  • 问题内容: 我正在使用MySQL Connector / .NET,它的所有提供程序都带有FormsAuthentication。 我需要所有用户退出。该方法无法正常工作。 如何注销所有站点用户? 问题答案: 正如乔建议的那样,您可以编写一个HttpModule来使给定DateTime之前存在的任何cookie无效。如果将其放在配置文件中,则可以在必要时添加/删除它。例如, Web.config:

  • 问题内容: 我想知道当用户单击注销时是否可以删除网站的所有cookie,因为我将其用作删除cookie的功能,但无法正常工作: 有没有一种方法可以删除PHP中某个域的Cookie? 问题答案: PHP setcookie() 从该页面获取的信息将取消设置您域的所有cookie: http://www.php.net/manual/zh/function.setcookie.php#73484