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