了解liferay的权限系统

Understanding liferay's permission system

我已经阅读了关于 liferay 的所有主题。我已经阅读了很多教程,但不幸的是我无法理解 liferay 权限的概念。

如果你能回答我的问题,我将不胜感激。

只有我知道liferay portlet有两种类型的权限:modelportlet

例如:

<?xml version="1.0" encoding="UTF-8"?>

<resource-action-mapping>

    <portlet-resource>

        <portlet-name>testFCK</portlet-name>

        <permissions>

            <supports>

                <action-key>ADD_FOO</action-key>

                <action-key>VIEW</action-key>

                <action-key>DO_TRICS</action-key>

            </supports>

            <community-defaults>

                <action-key>VIEW</action-key>

                <action-key>ADD_FOO</action-key>

            </community-defaults>

            <guest-defaults>

                <action-key>VIEW</action-key>

            </guest-defaults>

            <guest-unsupported>

                <action-key>DO_TRICS</action-key>

            </guest-unsupported>

        </permissions>

    </portlet-resource>

    <model-resource>

        <model-name>me.pd.test.model.Foo</model-name>

        <portlet-ref>

            <portlet-name>testFCK</portlet-name>

        </portlet-ref>

        <permissions>

            <supports>

                <action-key>DELETE</action-key>

                <action-key>UPDATE</action-key>

                <action-key>VIEW</action-key>

            </supports>

            <community-defaults>

                <action-key>VIEW</action-key>

            </community-defaults>

            <guest-defaults>

                <action-key>VIEW</action-key>

            </guest-defaults>

            <guest-unsupported>

                <action-key>UPDATE</action-key>

                <action-key>DELETE</action-key>

            </guest-unsupported>

        </permissions>

    </model-resource>

</resource-action-mapping> 

我可以使用:

<action-key>ADD_FOO</action-key>

<action-key>VIEW</action-key>

<action-key>DO_TRICS</action-key>

在我的 portlet class 中检查用户是否有权执行类似的操作:

try {

    PortletPermissionUtil.check(themeDisplay.getPermissionChecker(), plid,  PortalUtil.getPortletId(actionRequest), "ADD_FOO");

} catch(PrincipalException e){

    System.out.println("NO ADD_FOO ACTION");

}

问题 1:

什么

<community-defaults>

     <action-key>VIEW</action-key>

     <action-key>ADD_FOO</action-key>

</community-defaults>

<guest-defaults>

    <action-key>VIEW</action-key>

</guest-defaults>

是什么意思?我创建了一个社区并向其中添加了用户(user1),当我检查用户的权限时,他没有权限。我应该在哪里使用检查?

在将实体存储到基础之前或之后使用 addResources 的示例有很多:

resourceLocalService.addResources(foo.getCompanyId(),
                foo.getGroupId(), foo.getUserId(),
                Foo.class.getName(),
                foo.getPrimaryKey(), false,
                true, true);

问题 2:

我为什么要使用它以及以下最后 3 个参数是什么意思?我不明白他们给社区或访客的权限是什么?

ResourceLocalServiceUtil.addResources(
    entry.getCompanyId(), entry.getGroupId(), entry.getUserId(),BlogsEntry.class.getName(), entry.getPrimaryKey().toString(),
    false,
    addCommunityPermissions,
    addGuestPermissions);

addResources 如何影响我的条目的权限?

问题 3:

我如何使用 <model-resource> 的操作以及我应该何时使用它?

提前致谢。

此致

回复:问题 1

有问题的片段是分配给某些用户类型 以对资源执行某些操作 的默认权限。 ResourceLocalServiceUtil 等中的资源是数据库中其他 真实 对象的扩展(例如 JournalArticle 或者,在您的示例中,me.pd.test.model.Foo ).因此,资源 是具有由 Liferay 管理的权限(即对资源类型的对象执行操作的权限)。

虽然您的对象可能有它的 groupIdcompanyId,但与其相关的资源可能有它自己的值,不幸的是,程序员的职责是保持这些冗余资源值最新-日期。

community-default(在最近的 Liferay 版本中重命名为 site-member-defaults)是分配给特定资源所属社区(即站点)成员的默认权限。因此,在您的示例中,如果您在 Baz 社区中创建了一些 Foo 类型的 Bar 对象,则 Baz 社区的成员应该默认分配 ADD_FOOVIEW Bar 对象的权限。也就是说,除非 addResource 方法中的 addCommunityPermissions 为假。

guest-default 权限类似,只是默认分配给来宾用户(同样,除非在创建资源时 addGuestPermissions 为 false)。

回复:问题 2

最后这些参数是 boolean portletActions, boolean addCommunityPermissions, boolean addGuestPermissions)

最后两个应该已经很容易理解了——如果您将 false 传递给它们,您实际上忽略了在您的权限 XML.

中定义的默认操作权限

portletActions 告诉您是否要添加与 portlet 本身 (true) 或 portlet 模型 (false) 相关的权限资源。

现在我不是 100% 确定,但我认为您永远不需要将 portletActions 传递为 true,因为 Liferay 本身应该管理 portlet 权限资源。

回复:问题 3

每当您的 portlet 管理一些持久对象(想想 book-catalogue portlet,它出现在许多 portlet 教程中,您可以在其中管理数据库中的书籍等)并且您希望通过 Liferay 管理这些对象的权限资源权限框架(您可以选择不这样做,并以其他方式管理这些权限)。