Я разрабатываю портлет JSF в Liferay-6.2, и я настраиваю разрешения. Я создал файл default.xml
, и я думаю, что он работает, так как он сохраняет в базе данных правильные разрешения. Также я думаю, что resourceLocalService.addResources(...)
работает, так как он также сохраняет в базе данных правильные строки, так или иначе я делаю это как Администратор, я не знаю, связано ли это с моей проблемой.Liferay PermissionChecker возвращает разрешения гостя вместо членов сайта
Моя проблема в том, что когда я пытаюсь проверить разрешение для члена сайта, он отказывает в разрешении, так как это был гость.
Вот значительная часть моей 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 таблице:
| 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_ таблице, 10163 является Владельца Идентификатор роли и 10170 является Идентификатор роли государства-члена сайта
Наконец, когда я хочу, чтобы проверить разрешение у меня есть это мой 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;
}
Но для члена сайта он возвращает мне false вместо true. Кто-нибудь знает, что я делаю неправильно?
Большое спасибо!