gpt4 book ai didi

java - 以编程方式为每个用户组创建角色

转载 作者:行者123 更新时间:2023-11-29 07:44:05 27 4
gpt4 key购买 nike

我想为我的门户中的每个用户组创建一个角色,以便我可以一次向许多用户授予特定访问权限,具体取决于他们属于哪个组。

使用 Liferay API,是否有任何方法可以通过编程方式为门户中存在的每个用户组添加角色?

这比通过 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

最佳答案

简而言之,您需要创建一个与您拥有的用户组名称相似的角色,然后将用户组分配给该角色。

您可以使用 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. 现在您会编写此代码片段吗?根据您的要求,有不同的地方:

    1. 带有用于执行此代码的 UI 的自定义插件 portlet。 (如果需要定期更好)
    2. 自定义插件操作 Hook ,代码进入 StartUpAction,在部署 Hook 时执行代码。应该取消部署 Hook ,否则每次部署 Hook 时都会运行。 (一次性使用效果更好)
    3. 自定义插件升级 Hook ,根据升级条件在部署期间执行一次代码。 (一次性使用效果更好)
    4. 使用 Beanshell,服务器管理脚本选择 Beanshell粘贴代码片段执行。您需要有正确的导入语句,然后只是代码片段,您就可以开始了。有关 Beanshell 用法的示例,您可以查看 my other answer . (一次性使用效果更好)

即便如此,您仍然需要为每个角色授予权限;-)

希望这对您有所帮助。

关于java - 以编程方式为每个用户组创建角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27336702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com