2

Liferay 6.1を使用していますが、個々の組織の権限を変更して、その組織OrgAに属していないRoleXを持つUserXがそれらの組織を管理できるようにします。

特に:

  • OrgARoleX表示および更新できるようにしたいControl Panel->Users and Organizations
  • UserXは新しい組織とユーザーを追加できます
  • UserXはRoleXに属していますが、OrgAには属していません(したがって、Organizationスコープの役割は役に立たないと思います)。

プログラムでやりたいのですが。


私がこれまでに試したこと

  • RoleXを作成し、次の権限を付与しました。

    • [コントロールパネル]->[ユーザーと組織]にアクセスするには(ポートレット125)
    • OrgA、スコープ4(個人):

      ActionKeys.VIEW、ActionKeys.UPDATE、ActionKeys.ASSIGN_USER_ROLES、ActionKeys.DELETE、ActionKeys.MANAGE_USERS

    • スコープ4のOrgAのグループ。

      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
      

RoleXを使用しているユーザーはUsers and Organizations、コントロールパネルのフォームにアクセスできますが、表示できるのは自分の組織のみで、OrgAは表示されません。

OrgAも表示および管理するためのアクセス許可を与えるにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

最後に、フックプラグインを使用して、RoleXの変更とinitusers_adminポートレットjspファイルの変更を行うことができましResource Permissions

主な問題は、LiferayがResourcePermissionsを使用して、ユーザーが所属する組織以外の組織管理を有効にしていないことでした。

特に、会社の管理者ロールに対してのみportal-trunk/portal-web/docroot/html/portlet/users_admin/init.jsp有効にするコード行が数行あります。

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

そこで、次の行をinit.jsp(フックでinit-ext.jspを使用できます)に追加して、RoleXでも有効にしました。

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

このように、データベースクエリは、組織、ユーザー、およびグループをフィルタリングしません。

2番目のステップは、追加、更新、管理などの権限を定義することです。ユーザーと組織、およびコントロールパネルのポートレットへのアクセス。

ResourcePermisssionLocalServiceこれは、スタートアップアクションフックとAPIを使用すると非常に簡単でした。

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 };

...オミシス..。

        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);

これが他の誰かを助けることができることを願っています。

于 2012-12-03T18:11:19.207 に答える