代码之家  ›  专栏  ›  技术社区  ›  Иван Волынчук

了解救生艇的许可制度

  •  3
  • Иван Волынчук  · 技术社区  · 9 年前

    我已经阅读了有关救生筏的所有主题。我读了很多教程,但不幸的是,我无法理解救生艇许可的概念。

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

    只有我知道,lifeay portlet有两种类型的权限: model portlet .

    例如:

    <?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 回复  |  直到 9 年前
        1
  •  0
  •   Michal M    9 年前

    回复:问题1

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

    尽管您的对象可能有 groupId companyId ,与之相关的资源可能有自己的值,不幸的是,程序员的角色是保持这些冗余资源值的最新。

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

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

    回复:问题2

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

    最后两个应该已经很容易理解了——如果你通过了 false 对于它们,您实际上忽略了权限XML中定义的默认操作权限。

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

    现在我不是100%确定,但我认为你永远不需要通过 portlet操作 因为Liferay本身应该管理portlet权限资源。

    回复:问题3

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