2016-07-23 7 views
0

Я разрабатываю портлет 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. Кто-нибудь знает, что я делаю неправильно?

Большое спасибо!

ответ

0

Решенный! Проблема заключалась в том, что пользователь не был участником сайта. Liferay делает разницу между зарегистрированными пользователями и членами сайта. Чтобы быть участником сайта, вы должны назначить новым пользователям роль этого сайта по умолчанию или назначить его позже с владельцем сайта.