访问Liferay 6.1自定义/继承的组织角色

访问Liferay 6.1自定义/继承的组织角色,liferay,organization,role,Liferay,Organization,Role,我使用的是Liferay 6.1 CE、Tomcat、Vaadin 6.8.4 可能是我的方法非常不正确,或者我错过了一些明显的东西。 我需要为我的用户控制crud功能——允许访问他们所属的组织和其下的任何子组织。(我正在使用Liferay的组织表) 为了简化权限管理,我希望将用户分配给层次结构中的组织。然后可以根据分配给该组织和任何上级组织的角色确定默认权限。对于常规角色来说,这似乎工作得相当好——但后来我尝试了一个自定义组织角色,但我无法像预期的那样掌握细节 我可以在用户的控制面板定义中看

我使用的是Liferay 6.1 CE、Tomcat、Vaadin 6.8.4
可能是我的方法非常不正确,或者我错过了一些明显的东西。

我需要为我的用户控制crud功能——允许访问他们所属的组织和其下的任何子组织。(我正在使用Liferay的
组织
表)

为了简化权限管理,我希望将用户分配给层次结构中的组织。然后可以根据分配给该组织和任何上级组织的角色确定默认权限。对于常规角色来说,这似乎工作得相当好——但后来我尝试了一个自定义组织角色,但我无法像预期的那样掌握细节

  • 我可以在用户的控制面板定义中看到正确的数据。
    (Liferay知道如何检索和显示自定义组织角色:-)

  • 我可以看到后端表
    usergrouprole
    中填充的实际数据值

  • 我能够检测到默认超级管理员/所有者的此角色(test@liferay)
    . . . 但我无法检测其他用户的角色:(

  • 我一直在使用
    RoleLocalServiceUtil
    GroupLocalServiceUtil
    而运气不佳

    我的直觉告诉我,放弃我的“纯粹主义”概念,转而回到熟悉的自定义查询,但我想先看看是否有其他人有更好的建议

    我目前不知道如何进入Liferay代码以找到相关的片段,因此如果您有一些阅读材料,这可能是一个选项:)


    线索?

    这看起来很难看(因为确实如此),但我想你需要打电话:

    UserGroupRoleLocalServiceUtil.hasUserGroupRole(长用户ID、长组ID、长角色ID);
    

    一般来说,XYZ表有(如果不总是)XYZLocalServiceUtil和XYZServiceUtil。

    这看起来很难看(因为它是),但我认为您需要调用:

    UserGroupRoleLocalServiceUtil.hasUserGroupRole(长用户ID、长组ID、长角色ID);
    

    一般来说,XYZ表有(如果不总是)XYZLocalServiceUtil和XYZServiceUtil。

    出于共享的精神,下面是一些显示权限的示例代码

    ThemeDisplay-ThemeDisplay=(ThemeDisplay)request.getAttribute(WebKeys.THEME\u DISPLAY);
    用户i_User=themeDisplay.getUser();
    PortletDisplay-portDisplay=themeDisplay.getPortletDisplay();
    字符串myRootname=portDisplay.getRootPortletId();
    字符串strOrgGroupRoles=“”;
    //== 1. 按组织(组)角色向用户提供的显示权限
    //== 2. 用户被分配到组织。
    //== 3. 组织是组织角色的成员。
    //== 4. OrgRole具有从当前选定的portlet权限(操作键)定义的权限
    List ugRoles=new ArrayList();
    ugRoles.addAll(UserGroupRoleLocalServiceUtil.getUserGroupRoles(i_user.getUserId());
    for(UserGroupRole ugRole:ugRoles){
    //==对于此用户分配的每个角色,显示角色名称和组织
    strOrgGroupRoles+=“'”+ugRole.getRole().getName()+”(roleId=“+ugRole.getRoleId()+”);
    strOrgGroupRoles+=“for organization”“+OrganizationLocalServiceUtil.getOrganization(ugRole.getGroup().getClassPK()).getName();
    strOrgGroupRoles+=“'(groupId=“+ugRole.getGroupId()+”)\n”;
    //==角色的权限更难找到-链接到资源
    //==数据显示'actionId'等同于'resourceaction'中的相对操作编号列'bitwiseValue'。
    //==障碍是ResourcePermission需要portlet名称的平分符,而不仅仅是roleId
    //==从主题显示getRootPortletId()获取此信息
    //==
    //==我认为Liferay 6.1.0 API可能在这里被破坏:ResourceActionLocalServiceUtil.getResourceAction需要字符串,字符串。
    //==…但是'bitwiseValue'列是BIGINT(20),因此不返回任何内容。
    //==这使我们从不同的角度攻击它
    List resourcePerms=new ArrayList();
    resourcePerms.addAll(ResourcePermissionLocalServiceUtil.getRoleResourcePermissions(ugRole.getRoleId());
    for(resourcePerm:resourcePerms){
    //==对于此角色的每个ResourcePermissions,获取actionId(等于角色权限又名操作密钥)
    //==链接是一个相对数字,在该表中不是唯一的,因此请确保它仅用于此portlet
    如果(resourcePerm.getName().equals(myRootname)){
    List resourceActions=new ArrayList();
    resourceActions.addAll(ResourceActionLocalServiceUtil.getResourceActions(myRootname));
    for(ResourceAction ResourceAction:resourceActions){
    //==对于列出的每个操作,确保它是我们想要的相对操作编号(actionId)
    if(resourceAction.getBitwiseValue()==resourcePerm.getActionIds()){
    strOrgGroupRoles+=“+--action=“+resourceAction.getActionId()+”\n”;
    }   
    }//==此portlet的ActionID结束
    }//==如果仅此portlet,则结束
    }//==此角色的最终资源权限
    }//==此用户的最终角色
    


    Robin

    本着共享的精神,下面是一些显示权限的示例代码

    ThemeDisplay-ThemeDisplay=(ThemeDisplay)request.getAttribute(WebKeys.THEME\u DISPLAY);
    用户i_User=themeDisplay.getUser();
    PortletDisplay-portDisplay=themeDisplay.getPortletDisplay();
    字符串myRootname=portDisplay.getRootPortletId();
    字符串strOrgGroupRoles=“”;
    //== 1. 按组织(组)角色向用户提供的显示权限
    //== 2. 用户被分配到组织。
    //== 3. 组织是组织角色的成员。
    //== 4. OrgRole具有从当前选定的portlet权限(操作键)定义的权限
    List ugRoles=new ArrayList();
    ugRoles.addAll(UserGroupRoleLocalServiceUt