我想在门户网站中为每个用户组创建一个角色,以便我可以同时授予对多个用户的特定访问权限,具体取决于他们所属的组。
使用Liferay API,有没有办法以编程方式为Portal中存在的每个用户组添加角色?
这比通过UI单独添加每个角色更有效。
像
这样的东西for(i = 0; i < userGroups.size(); i++){
roles.add(userGroups[i].getName());
}
如果可能,我希望在同一方法中将相同的用户组分配给该角色,否则该角色将不知道相关用户组:
roles.assignUserGroup(userGroups[i]);
有人完成了类似的任务吗?
链接Liferay论坛帖子http://liferay.com/community/forums/-/message_boards/message/46355079
答案 0 :(得分:4)
简而言之,您需要创建一个与您拥有的UserGroup类似名称的角色,然后将UserGroup分配给该角色。
您可以使用Liferay的API以编程方式执行此操作,因为liferay还会创建不同类型的角色,并为该角色分配用户,用户组等。
您只需要深入了解源代码即可。检查RoleLocalServiceImpl
,UserGroupLocalServiceImpl
和GroupLocalServiceImpl
的源代码。
我正在为 Liferay v6.2 提供步骤,6.0和6.1应该没有太大的变化:
完成循环:
for (UserGroup userGroup : userGroups) {
... // steps to follow
}
获取UserGroup的名称:userGroup.getName()
使用RoleLocalServiceUtil.addRole( ... )创建角色,并使用GroupLocalServiceUtil.addRoleGroups( ... )
将userGroup分配给角色for (UserGroup userGroup : userGroups) {
String userGroupName = userGroup.getName();
// for locale specific title (optional, can be null)
Map<Locale, String> titleMap = new HashMap<Locale, String>();
titleMap.put(Locale.ENGLISH, userGroupName);
// for locale specific description (optional, can be null)
Map<Locale, String> descriptionMap = new HashMap<Locale, String>();
titleMap.put(Locale.ENGLISH, "Role created for UserGroup - " + userGroupName);
int type = RoleConstants.TYPE_REGULAR;
// adding the role
Role role = RoleLocalServiceUtil.addRole(userId, Role.class.getName(), 0, userGroupName, titleMap, descriptionMap, type, null, null);
// assigning the UserGroup to the role
GroupLocalServiceUtil.addRoleGroups(role.getRoleId(), new long[]{userGroup.getGroupId()}); // need to pass groupId and not userGroupId
}
现在你会写这段代码片段吗?根据您的要求,有多种地方可供选择:
即使在所有这些之后,你仍然需要尽力给予每个角色许可; - )
希望这会有所帮助。