2014-12-06 56 views
0

我想为我的门户中的每个用户组创建角色,以便我可以同时授予对许多用户的特定访问权限,具体取决于他们属于哪个组。以编程方式为每个用户组创建角色

使用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

您只能在Liferay中创建以下类型或角色: 1)常规角色:权限在门户级别定义,并在门户级别应用。2)站点角色:权限在门户级别定义并应用3) 组织角色:权限在门户级别定义并适用于一个特定组织。4)团队:权限在特定站点内定义,并在特定站点内分配。 它不支持用户组级别的角色。请描述您的要求,以便我可以建议一种替代方法来实现它。 – 2014-12-07 23:25:04

+0

您确实可以将角色分配给用户组。这将是您提到的4个角色之一,但属于某个组的用户仍然可以继承共同角色。我限制对特定页面的某些用户组的访问权限,为用户组分配角色给予该能力,并在需要时提供更多 – 2014-12-08 00:46:11

回答

4

总之,你需要创建一个类似的名字,你有用户组的角色,然后将用户组分配给该角色。

您可以使用Liferay的API以编程方式进行此操作,因为liferay同样可以创建不同类型的角色并将用户,用户组等分配给该角色。

你只需要深入到源代码来做到这一点。检查源代码RoleLocalServiceImpl,UserGroupLocalServiceImplGroupLocalServiceImpl

我提供Liferay的V6.2的步骤,不应该有在6.0和太大的变化6.1:

  1. 使用UserGroupLocalServiceUtil.getUserGroups(companyId)
  2. 循环通过它,你必须提取所有群组完成:

    for (UserGroup userGroup : userGroups) { 
        ... // steps to follow 
    } 
    
  3. 获取用户组的名称:userGroup.getName()

  4. 创建角色使用RoleLocalServiceUtil.addRole(...)和使用GroupLocalServiceUtil.addRoleGroups(...)

    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 
    } 
    
  5. 现在是你会写这个代码段分配给userGroup表示角色?有各种地方取决于你有什么要求:

    1. 用户界面自定义插件portlet来执行此代码。 (如果需要定期更好)
    2. 自定义插件action-hook和代码进入StartUpAction内部,在部署挂钩时执行代码。应该取消部署钩子,否则每次部署钩子时都会运行钩子。 (更适合一次性使用)
    3. 自定义插件升级挂钩,根据升级条件一次执行代码。
    4. 使用BeanShell中,服务器管理脚本选择的BeanShell粘贴代码片段执行(一次性使用更好)。你需要有正确的导入语句,然后只是代码片段,你很好。有关Beanshell使用情况的示例,您可以检查my other answer。 (更好地为一次性使用)

即使在这一切之后,你仍然要采取不厌其烦地给予许可给每个角色;-)

希望这有助于虽然。

+0

这真是太棒了非常感谢 – 2014-12-09 13:38:38

+0

只是为了让其他用户知道,请包括指向您的链接Liferay的帖子也在liferay论坛的问题中,反之亦然。这有助于社区了解它是否在某个地方得到答复。将会节省社区的宝贵时间。谢谢。 https://www.liferay.com/community/forums/-/message_boards/message/46355079 – 2014-12-12 16:42:11

+1

@PrakashK非常感谢你“需要传递groupId而不是userGroupId”这个评论 – playmaker420 2015-03-27 08:22:49