Liferay PermissionChecker returns 访客的权限而不是站点成员的
Liferay PermissionChecker returns guest's permissions instead of site member's
我正在 Liferay-6.2 中开发一个 JSF portlet,我正在设置权限。我已经创建了我的 default.xml
文件,我认为它正在工作,因为它在数据库中保存了正确的权限。另外我认为 resourceLocalService.addResources(...)
正在工作,因为它还在数据库中保存了正确的行,无论如何我是以管理员身份做的,我不知道它是否与我的问题有关。
我的问题是当我尝试检查站点成员的权限时,它拒绝了权限,因为它是访客。
这是我的重要部分 default.xml
<model-resource>
<model-name>org.lrc.liferay.toolbuilder.model</model-name>
<portlet-ref>
<portlet-name>tool-builder</portlet-name>
</portlet-ref>
<permissions>
<supports>
<action-key>ADD_TOOL_DEF</action-key>
<action-key>ADD_TOOL_INSTANCE</action-key>
</supports>
<site-member-defaults>
<action-key>ADD_TOOL_INSTANCE</action-key>
</site-member-defaults>
<guest-defaults />
<guest-unsupported>
<action-key>ADD_TOOL_DEF</action-key>
<action-key>ADD_TOOL_INSTANCE</action-key>
</guest-unsupported>
</permissions>
</model-resource>
结果我想它将这两行保存在 ResourceAction table:
| resourceActionId | name | actionId | bitwiseValue |
| 2705 | org.lrc.liferay.toolbuilder.model | ADD_TOOL_DEF | 2 |
| 2706 | org.lrc.liferay.toolbuilder.model | ADD_TOOL_INSTANCE | 4 |
| 2707 | org.lrc.liferay.toolbuilder.model | PERMISSIONS | 4 |
当我保存我的资源时,我会这样做
User user = userPersistence.findByPrimaryKey(liferayFacesContext.getUserId());
resourceLocalService.addResources(user.getCompanyId(),
toolDefDBE.getGroupId(),
liferayFacesContext.getScopeGroupId(),
"org.lrc.liferay.toolbuilder.model",
toolDef.getToolDefId(), false, true, true);
如果我没记错的话,将其保存在数据库中:
| resourcePermissionId | companyId | name | primKey | roleId | ownerId | actionIds |
| 6101 | 10154 | org.lrc.liferay.toolbuilder.model | 5201 | 10163 | 10158 | 14 |
| 6102 | 10154 | org.lrc.liferay.toolbuilder.model | 5201 | 10170 | 0 | 4 |
根据Role_ table,10163是Owner的roleId,10170是Site member的roleId
最后,当我想检查我拥有的权限时,这是我的 requestBean:
public Boolean getHasAddPermission() {
if (this.hasAddPermission == null) {
LiferayFacesContext liferayFacesContext = LiferayFacesContext.getInstance();
long scopeGroupId = liferayFacesContext.getScopeGroupId();
System.out.println("El scopeGroupId es " + scopeGroupId);
this.hasAddPermission = liferayFacesContext.getThemeDisplay().getPermissionChecker().hasPermission
(scopeGroupId, ToolSession.MODEL, toolSession.getToolDef().getToolDefDBEId(), "ADD_TOOL_INSTANCE");
}
return this.hasAddPermission;
}
但对于站点成员来说,returns 我认为它是错误的而不是正确的。有人知道我做错了什么吗?
非常感谢!
解决了!!问题是用户不是站点成员。 Liferay 区分登录用户和站点成员。要成为站点成员,您必须默认为新用户分配该站点的角色,或者稍后将其分配给站点所有者用户
我正在 Liferay-6.2 中开发一个 JSF portlet,我正在设置权限。我已经创建了我的 default.xml
文件,我认为它正在工作,因为它在数据库中保存了正确的权限。另外我认为 resourceLocalService.addResources(...)
正在工作,因为它还在数据库中保存了正确的行,无论如何我是以管理员身份做的,我不知道它是否与我的问题有关。
我的问题是当我尝试检查站点成员的权限时,它拒绝了权限,因为它是访客。
这是我的重要部分 default.xml
<model-resource>
<model-name>org.lrc.liferay.toolbuilder.model</model-name>
<portlet-ref>
<portlet-name>tool-builder</portlet-name>
</portlet-ref>
<permissions>
<supports>
<action-key>ADD_TOOL_DEF</action-key>
<action-key>ADD_TOOL_INSTANCE</action-key>
</supports>
<site-member-defaults>
<action-key>ADD_TOOL_INSTANCE</action-key>
</site-member-defaults>
<guest-defaults />
<guest-unsupported>
<action-key>ADD_TOOL_DEF</action-key>
<action-key>ADD_TOOL_INSTANCE</action-key>
</guest-unsupported>
</permissions>
</model-resource>
结果我想它将这两行保存在 ResourceAction table:
| resourceActionId | name | actionId | bitwiseValue |
| 2705 | org.lrc.liferay.toolbuilder.model | ADD_TOOL_DEF | 2 |
| 2706 | org.lrc.liferay.toolbuilder.model | ADD_TOOL_INSTANCE | 4 |
| 2707 | org.lrc.liferay.toolbuilder.model | PERMISSIONS | 4 |
当我保存我的资源时,我会这样做
User user = userPersistence.findByPrimaryKey(liferayFacesContext.getUserId());
resourceLocalService.addResources(user.getCompanyId(),
toolDefDBE.getGroupId(),
liferayFacesContext.getScopeGroupId(),
"org.lrc.liferay.toolbuilder.model",
toolDef.getToolDefId(), false, true, true);
如果我没记错的话,将其保存在数据库中:
| resourcePermissionId | companyId | name | primKey | roleId | ownerId | actionIds |
| 6101 | 10154 | org.lrc.liferay.toolbuilder.model | 5201 | 10163 | 10158 | 14 |
| 6102 | 10154 | org.lrc.liferay.toolbuilder.model | 5201 | 10170 | 0 | 4 |
根据Role_ table,10163是Owner的roleId,10170是Site member的roleId
最后,当我想检查我拥有的权限时,这是我的 requestBean:
public Boolean getHasAddPermission() {
if (this.hasAddPermission == null) {
LiferayFacesContext liferayFacesContext = LiferayFacesContext.getInstance();
long scopeGroupId = liferayFacesContext.getScopeGroupId();
System.out.println("El scopeGroupId es " + scopeGroupId);
this.hasAddPermission = liferayFacesContext.getThemeDisplay().getPermissionChecker().hasPermission
(scopeGroupId, ToolSession.MODEL, toolSession.getToolDef().getToolDefDBEId(), "ADD_TOOL_INSTANCE");
}
return this.hasAddPermission;
}
但对于站点成员来说,returns 我认为它是错误的而不是正确的。有人知道我做错了什么吗?
非常感谢!
解决了!!问题是用户不是站点成员。 Liferay 区分登录用户和站点成员。要成为站点成员,您必须默认为新用户分配该站点的角色,或者稍后将其分配给站点所有者用户