了解liferay的许可系统

时间:2015-02-05 19:42:41

标签: permissions liferay portlet

我已经阅读了有关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 enty基础之前或之后使用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 个答案:

答案 0 :(得分:0)

re:问题1

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

虽然您的对象可能有groupIdcompanyId,但与之相关的资源可能拥有自己的值,不幸的是,它是程序员的角色,可以使这些冗余资源值保持最新状态

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

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

re:问题2

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

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

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

现在我不是百分百肯定,但我认为您不应该将portletActions传递为真,因为Liferay本身应该管理portlet权限资源。

re:问题3

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