理解Liferay的权限系统

3

我已经阅读了所有与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类中,我需要检查用户是否有权限执行某项操作,例如:

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)添加到其中,但是当我检查用户权限时,他没有它。我应该在哪里使用检查?

有很多例子可以在将资源添加到基础STORE条目之前或之后使用addResources:

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

问题2:

为什么我应该使用它,以下最后三个参数代表什么意思?我不明白它们授予社区或访客哪些权限?

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

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

问题三:

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

提前致谢。

最好的祝福

1个回答

0

关于问题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为false。

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

关于问题2

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

最后两个应该很容易理解-如果将它们传递为false,则实际上忽略了在权限XML中定义的默认操作权限。

portletActions 用于指定是添加与端口本身相关的权限资源(true)还是与端口模型相关的权限资源(false)。

我不是100%确定,但我认为您永远不需要将 portletActions 设置为 true,因为 Liferay 本身应该管理端口的权限资源。

关于问题3

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


谢谢。这很有帮助。每当我看到一些钩子示例(或扩展)时,它们都有一个门户代码的源(****Wrapper.java或PortletStrutsAction.java),只需添加一些内容即可。我在哪里可以获取源代码? - Иван Волынчук

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接