【问题标题】:Liferay PermissionChecker returns guest's permissions instead of site member'sLiferay PermissionChecker 返回访客的权限而不是站点成员的权限
【发布时间】:2016-11-27 05:00:14
【问题描述】:

我正在 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 表中:

| 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是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;
}

但对于站点成员,它返回我的是 false 而不是 true。有谁知道我做错了什么?

非常感谢!

【问题讨论】:

    标签: java jsf permissions liferay liferay-6


    【解决方案1】:

    解决了!!问题是用户不是站点成员。 Liferay 在登录用户和站点成员之间有所不同。要成为站点成员,您必须默认为新用户分配该站点的角色,或者稍后将其分配给站点所有者用户

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2017-10-08
      • 2020-09-25
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多