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

如何为不属于此组织的用户授予角色的组织管理权限?

宫俊远
2023-03-14

我使用的是Liferay 6.1,我想更改单个组织的权限,以便这些组织可以由不属于该组织OrgA的带有劳力士的UserX管理。

特别是:

  • 我想让劳力士在控制面板中查看和更新OrgA-

我想用编程的方式来做。

目前为止我所做的尝试:

>

  • 创建劳力士并授予其以下权限:

    >

  • 访问控制面板-

    操作键。查看,操作键。更新,动作键。分配\u USER\u角色、操作键。删除,动作键。管理\u用户

    OrgA集团,范围4:

    ActionKeys.ASSIGN_MEMBERS, ActionKeys.ASSIGN_USER_ROLES,
    ActionKeys.CONFIGURE_PORTLETS, ActionKeys.DELETE,
    ActionKeys.MANAGE_ANNOUNCEMENTS, ActionKeys.MANAGE_LAYOUTS,
    ActionKeys.UPDATE, ActionKeys.VIEW, ActionKeys.VIEW_MEMBERS
    

    使用劳力士的用户可以访问控制面板中的“用户和组织”窗体,但他们只能看到自己的组织,而不能看到组织。

    如何授予查看和管理OrgA的权限?

    谢啦

  • 共有1个答案

    湛联
    2023-03-14

    最后,我能够完成修改资源权限为RoleX和修改初始化users_adminportlet jsp文件,都使用钩子插件。

    主要问题是Liferay没有使用ResourcePermissions来启用用户所属组织以外的组织管理。

    特别是在门户主干/门户网站/docroot/html/portlet/users\u admin/init中。jsp只有几行代码仅为公司管理员角色启用它:

    else if (permissionChecker.isCompanyAdmin()) {
        filterManageableGroups = false;
        filterManageableOrganizations = false;
        filterManageableUserGroups = false;
    }
    

    因此,我在init中添加了以下行。jsp(您可以在挂钩中使用init-ext.jsp)也可以为劳力士启用它:

    if (MyUtils.isRoleX()) {
        filterManageableGroups = false;
        filterManageableOrganizations = false;
        filterManageableUserGroups = false;
    }
    

    这样,数据库查询就不会过滤组织、用户和组。

    第二步是定义添加、更新、管理等权限。。和访问控制面板中的portlet。

    使用启动操作挂钩和ResourcePermissionLocalService,这非常简单:

    private static final String[] ORGANIZATION_ENTRY_ACTION_IDS = new String[] {
                ActionKeys.VIEW, ActionKeys.UPDATE, ActionKeys.ASSIGN_USER_ROLES,
                ActionKeys.DELETE, ActionKeys.MANAGE_USERS };
    
        private static final String[] ORGANIZATION_CUSTOM_FIELDS_ENTRY_ACTION_IDS = new String[] {
                ActionKeys.VIEW, ActionKeys.UPDATE };
    
        public static final String[] ORGANIZATION_MODEL_ACTION_IDS = new String[] {
                ActionKeys.ASSIGN_MEMBERS, ActionKeys.ASSIGN_USER_ROLES,
                ActionKeys.DELETE, ActionKeys.MANAGE_ANNOUNCEMENTS,
                ActionKeys.UPDATE, ActionKeys.VIEW, ActionKeys.MANAGE_USERS,
                ActionKeys.MANAGE_SUBORGANIZATIONS };
    
        public static final String[] ORGANIZATION_GROUP_ENTRY_ACTION_IDS = new String[] {
                ActionKeys.ASSIGN_MEMBERS, ActionKeys.ASSIGN_USER_ROLES,
                ActionKeys.UPDATE, ActionKeys.VIEW, ActionKeys.VIEW_MEMBERS };
    
        private static final String[] PORTAL_ACTION_IDS = new String[] {
                ActionKeys.ADD_USER, ActionKeys.ADD_ORGANIZATION,
                ActionKeys.VIEW_CONTROL_PANEL };
    
        private static final String[] USERS_ORG_ADMIN_ACTION_IDS = new String[] { ActionKeys.ACCESS_IN_CONTROL_PANEL };
    

    。。。omissis。。。

            ResourcePermissionLocalServiceUtil.setResourcePermissions(companyId,
                    Organization.class.getName(),
                    ResourceConstants.SCOPE_GROUP_TEMPLATE, "0", CiUtils
                            .getRoleX().getPrimaryKey(),
                    ORGANIZATION_MODEL_ACTION_IDS);
    
            // ORGANIZATION MODEL COMPANY PERMISSIONS
            ResourcePermissionLocalServiceUtil.setResourcePermissions(companyId,
                    Organization.class.getName(), ResourceConstants.SCOPE_COMPANY,
                    Long.toString(companyId),
                    CiUtils.getRoleX().getPrimaryKey(),
                    ORGANIZATION_MODEL_ACTION_IDS);
    
            // PORTAL (portlet 90) PERMISSIONS
            ResourcePermissionLocalServiceUtil.setResourcePermissions(companyId,
                    "90", ResourceConstants.SCOPE_COMPANY,
                    Long.toString(companyId),
                    CiUtils.getRoleX().getPrimaryKey(),
                    PORTAL_ACTION_IDS);
    
            // USER_ORG_ADMINS PORTLET (125) PERMISSIONS
            ResourcePermissionLocalServiceUtil.setResourcePermissions(companyId,
                    "125", ResourceConstants.SCOPE_COMPANY,
                    Long.toString(companyId),
                    CiUtils.getRoleX().getPrimaryKey(),
                    USERS_ORG_ADMIN_ACTION_IDS);
    

    对于每个组织:

    ResourcePermissionLocalServiceUtil.setResourcePermissions(organization.getCompanyId(),
                                Organization.class.getName(),   ResourceConstants.SCOPE_INDIVIDUAL, Long                    .toString(organization.getPrimaryKey()),
                                    MyUtils.getRoleX().getPrimaryKey(),
                                    ORGANIZATION_ENTRY_ACTION_IDS);
            long groupId = organization.getGroupId();
    
            ResourcePermissionLocalServiceUtil.setResourcePermissions(
                        organization.getCompanyId(),Group.class.getName(), ResourceConstants.SCOPE_INDIVIDUAL,Long.toString(groupId),
                        MyUtils.getRoleX().getPrimaryKey(),
                        ORGANIZATION_GROUP_ENTRY_ACTION_IDS);
    

    希望这能帮助别人。

     类似资料:
    • 除了个人帐户之外,GitHub 还提供被称为组织(Organizations)的帐户。 组织账户和个人账户一样都有一个用于存放所拥有项目的命名空间,但是许多其他的东西都是不同的。 组织帐户代表了一组共同拥有多个项目的人,同时也提供一些工具用于对成员进行分组管理。 通常,这种账户被用于开源群组(例如:“perl”或者“rails”),或者公司(例如:“google”或者“twitter”)。 组织的

    • 除了个人帐户之外,GitHub 还提供被称为组织(Organizations)的帐户。 组织账户和个人账户一样都有一个用于存放所拥有项目的命名空间,但是许多其他的东西都是不同的。 组织帐户代表了一组共同拥有多个项目的人,同时也提供一些工具用于对成员进行分组管理。 通常,这种账户被用于开源群组(例如:“perl”或者“rails”),或者公司(例如:“google”或者“twitter”)。 组织的

    • 我是oAuth2安全系统的新手。关于访问REST资源的基于用户角色的授权,我有一个问题。我的互联网冲浪提供了关于oauth2的身份验证部分的输入。 让我提供给你困扰我的情况。

    • 我们使用Microsoft Graph和openid、email、profile和user.readbasic.all范围为公共社区创建了一个聚合应用程序(AD&live用户可以登录)。 根据Microsoft文档,我们将管理同意url准备为 在管理员同意后,用户也不能登录到应用程序。请帮助我们这里缺少的东西。

    • GitHub的文档描述了对组织的不同访问级别,但我无法找到如何实际更改用户对组织的访问级别。 如何使组织成员成为管理员?

    • 我正在尝试设置自己的ca服务器和客户端。在用admin初始化ca服务器之后,我用ca client enroll cli命令注册了它。然后我想在系统中添加另一个组织。我更改了结构ca服务器配置。yml文件附属部分然后重新启动服务器,然后尝试使用ca客户端向该组织注册新用户。但它失败了,出现了“未找到关联”错误。所以我想知道这个问题。在使用admin user初始化服务器之后,其他用户和组织是否应该