原创

Liferay6.2为资源添加权限

公共公告板很棒。任何人都可以将任何事情告知他人。另一方面,任何人都可以在公告板上发布任何内容其中一些内容可能与社区无关。其他内容可能不合适。因此,您有时需要一种方法来限制谁可以发布或访问内容。

幸运的是,无论您的 portlet 做什么,对它及其内容的访问都可以通过权限进行控制。继续阅读以了解 Liferay 的权限系统以及如何向您的应用程序添加权限。

Liferay 的权限系统

Liferay 的权限系统使用灵活的机制来定义给定用户可以在门户或特定 portlet 的上下文中执行的操作。门户和 portlet 开发人员将可以在门户或 portlet 中执行的操作分解为不同的操作授予特定角色执行操作的能力的行为是授予权限的行为 在 Liferay 中,权限不会直接授予用户。相反,权限被授予角色。反过来,角色可以分配给特定的用户、站点、组织或用户组。

开发人员需要定义适合其应用程序业务逻辑所需的不同类型的操作。他们无需担心哪些用户将获得哪些权限。确定和配置操作后,门户管理员可以通过分配角色向用户、站点、组织或用户组授予执行这些操作的权限。管理员可以使用门户的管理工具向角色授予权限,也可以使用各个 portlet 的权限 UI。

在本文中,您将了解 Liferay 应用程序开发人员如何使用 Liferay 的权限系统为门户管理员提供与默认 Liferay 应用程序相同级别的权限控制。

在继续之前,请确保您了解这些关键术语:

操作:可以由门户用户执行的操作。例如,可以在留言板门户进行的操作包括ADD_TO_PAGE, CONFIGURATION,和VIEW可以在留言簿实体进行的操作包括ADD_ENTRYDELETEPERMISSIONSUPDATE,和VIEW

资源:门户中可以执行操作的任何 portlet 或实体的通用表示。资源用于权限检查。例如,Liferay 门户实例中的资源可以包括具有实例 ID 的 RSS portlet hF5f、全局范围的 Wiki 页面、站点 X 的留言簿条目以及具有 ID 的消息板帖子5052

权限:可以对资源执行的操作。在 Liferay 的数据库中,资源和动作是成对保存的。(表中的每个条目 ResourceAction都包含 portlet 或实体的名称以及操作的名称。)例如,VIEW查看留言板 portlet相关的操作与guestbook_WAR_guestbookportlet portlet ID相关联VIEW相对于动作观看留言簿或 观看留言簿条目都与相关联的 com.liferay.docs.guestbook.model.Guestbook和 com.liferay.docs.guestbook.model.Entry实体分别。

Liferay 中有两种资源:portlet 资源模型资源Portlet 资源代表 Portlet。Portlet 资源的名称是来自 Portletportlet.xml文件的 Portlet ID (或者在核心 Portlet 的情况下,Liferay 的portlet-custom.xml. 模型资源是指Liferay 中的实体。模型资源的名称是它们所代表的实体的完全限定类名称。在下面显示的 XML 中,权限实现首先为portlet资源定义,然后为模型资源定义。

您可以使用四个简单的步骤(也称为DRAC为您的自定义 portlet 添加权限

  1. d efine所有的资源和他们的权限。这是本教程中介绍的步骤。

  2. ř egister中的权限系统中的所有定义的资源。这也称为添加资源此步骤在教程添加和删除资源 中讨论 

  3. A将必要的权限与资源相关联。此步骤在教程向用户公开权限接口中讨论

  4. ç返回资源之前赫克许可。此步骤在教程检查权限中进行了描述

定义所有资源和权限

第一步是定义您的资源以及可以对它们定义的操作。这里使用Guestbook portlet 来演示如何定义portlet 资源和模型资源。打开default.xml留言板 portletdocroot/WEB-INF/src/resource-actions目录中文件,您将看到以下资源到操作的映射:

<?xml version="1.0"?>
<!DOCTYPE resource-action-mapping PUBLIC "-//Liferay//DTD Resource Action Mapping 6.2.0//EN"
"http://www.liferay.com/dtd/liferay-resource-action- mapping_6_2_0.dtd">

<resource-action-mapping>
    <portlet-resource>
        <portlet-name>guestbook</portlet-name>
        <permissions>
            <supports>
                <action-key>ADD_TO_PAGE</action-key>
                <action-key>CONFIGURATION</action-key>
                <action-key>VIEW</action-key>
            </supports>
            <site-member-defaults>
                <action-key>VIEW</action-key>
            </site-member-defaults>
            <guest-defaults>
                <action-key>VIEW</action-key>
            </guest-defaults>
            <guest-unsupported />
        </permissions>
    </portlet-resource>

    <model-resource>
        <model-name>com.liferay.docs.guestbook.model</model-name>
        <portlet-ref>
            <portlet-name>guestbook</portlet-name>
        </portlet-ref>
        <permissions>
        <supports>
            <action-key>ADD_GUESTBOOK</action-key>
            <action-key>ADD_ENTRY</action-key>
        </supports>
        <site-member-defaults>
            <action-key>ADD_ENTRY</action-key>
        </site-member-defaults>
        <guest-defaults />
        <guest-unsupported>
            <action-key>ADD_GUESTBOOK</action-key>
            <action-key>ADD_ENTRY</action-key>
        </guest-unsupported>
        </permissions>
    </model-resource>

    <model-resource>
        <model-name>com.liferay.docs.guestbook.model.Guestbook</model-name>
        <portlet-ref>
            <portlet-name>guestbook</portlet-name>
        </portlet-ref>
        <permissions>
        <supports>
            <action-key>ADD_ENTRY</action-key>
            <action-key>DELETE</action-key>
            <action-key>PERMISSIONS</action-key>
            <action-key>UPDATE</action-key>
            <action-key>VIEW</action-key>
        </supports>
        <site-member-defaults>
            <action-key>ADD_ENTRY</action-key>
            <action-key>VIEW</action-key>
        </site-member-defaults>
        <guest-defaults>
            <action-key>VIEW</action-key>
        </guest-defaults>
        <guest-unsupported>
            <action-key>UPDATE</action-key>
        </guest-unsupported>
        </permissions>
    </model-resource>

    <model-resource>
        <model-name>com.liferay.docs.guestbook.model.Entry</model-name>
        <portlet-ref>
            <portlet-name>guestbook</portlet-name>
        </portlet-ref>
        <permissions>
        <supports>
            <action-key>DELETE</action-key>
            <action-key>PERMISSIONS</action-key>
            <action-key>UPDATE</action-key>
            <action-key>VIEW</action-key>
        </supports>
        <site-member-defaults>
            <action-key>VIEW</action-key>
        </site-member-defaults>
        <guest-defaults>
            <action-key>VIEW</action-key>
        </guest-defaults>
        <guest-unsupported>
            <action-key>UPDATE</action-key>
        </guest-unsupported>
        </permissions>
    </model-resource>
</resource-action-mapping>

<portlet-resource>标记用于定义可针对 Portlet 窗口采取的操作。对于留言簿 portlet,此类操作包括:

  • ADD_TO_PAGE:将 portlet添加到页面
  • CONFIGURATION访问portlet 的配置窗口
  • VIEW查看portlet

所有支持的动作都定义在<supports>标签中,标签的子<permissions>标签(标签本身就是标签的子<portlet-resource> 标签:

<supports>
    <action-key>ADD_TO_PAGE</action-key>
    <action-key>CONFIGURATION</action-key>
    <action-key>VIEW</action-key>
</supports>

站点成员的默认权限在<site-member-defaults>标记中定义 对于留言簿 portlet,站点成员可以查看站点中的任何留言簿 portlet:

<site-member-defaults>
    <action-key>VIEW</action-key>
</site-member-defaults>

同样,来宾的默认权限在<guest-defaults>标签中定义 访客还可以查看站点中的任何留言簿 portlet:

<guest-defaults>
    <action-key>VIEW</action-key>
</guest-defaults>

<guest-unsupported>标签指定禁止访客的权限。没有任何禁止的访客留言板 portlet:

<guest-unsupported />

但是禁止访客添加留言簿和留言簿条目,例如在第一个<model-resource>标签中看到以下条目

<guest-unsupported>
    <action-key>ADD_GUESTBOOK</action-key>
    <action-key>ADD_ENTRY</action-key>
</guest-unsupported>

<model-resource>标签用于定义可以针对模型(也称为实体)执行的操作。Liferay 中有两种动作:顶级动作资源动作顶级操作不会应用于特定资源。例如,添加新实体的操作不会应用于特定资源,因此它被视为顶级操作。第一个<model-resource>标签将添加留言簿和留言簿条目资源定义为顶级操作:

<supports>
    <action-key>ADD_GUESTBOOK</action-key>
    <action-key>ADD_ENTRY</action-key>
</supports>

第二个和第三个<model-resource>标签分别定义了可应用于Guestbook、 和GuestbookEntry实体的资源操作例如,以下操作的权限是针对与Guestbook实体关联的资源定义的

<supports>
    <action-key>ADD_ENTRY</action-key>
    <action-key>DELETE</action-key>
    <action-key>PERMISSIONS</action-key>
    <action-key>UPDATE</action-key>
    <action-key>VIEW</action-key>
</supports>

同样,以下操作的权限是针对与GuestbookEntry实体关联的资源定义的

<supports>
    <action-key>DELETE</action-key>
    <action-key>PERMISSIONS</action-key>
    <action-key>UPDATE</action-key>
    <action-key>VIEW</action-key>
</supports>

<model-resource>注意,在每个标签中,必须定义模型名称。的 <model-name>必须是封装的或实体类的完全合格的名称。例如,com.liferay.docs.guestbook.model是包com.liferay.docs.guestbook.model.Guestbook名,是实体类名。使用包是引用顶级操作的权限的推荐约定:

<model-name>com.liferay.docs.guestbook.model</model-name>

ADD_GUESTBOOKADD_ENTRY权限定义这种方式,因为他们是顶级操作。对于资源操作,指定了实体类:

<model-name>com.liferay.docs.guestbook.model.Guestbook</model-name>

<portlet-ref>元素紧随其后并包含一个<portlet-name>子标签。

<portlet-ref>
    <portlet-name>guestbook</portlet-name>
</portlet-ref>

的值<portlet-name>引用模型资源所属的 portlet 的名称。模型资源可能属于被多个<portlet-name>元素引用的多个 portlet ,但这种情况并不常见。

<supports><site-member-defaults><guest-defaults>,和 <guest-unsupported>标签的工作方式相同的<model-resource>标签,因为他们在做<portlet-resource>标记。<supports>标签允许您指定需要权限才能执行的受支持操作的列表。该 <site-member-defaults>标签和<guest-defaults>标签分别定义了网站会员及嘉宾默认权限。并且 <guest-unsupported>标签指定了禁止访客的权限。

在为您的 portlet 定义资源权限之后,您需要将 Liferay 指向resource-actions包含您的定义XML 文件。这是 docroot/WEB-INF/src/resource-actions/default.xml留言簿项目。在Liferay 的核心中,目录中有多个针对各种核心Liferay portlet 的权限XML 定义文件portal/portal-impl/src/resource-actions 。default.xml文件包含指向各种应用程序的定义文件的指针。这段摘录自default.xml引用了所有内置 Liferay portlet 的资源权限定义文件:

<?xml version="1.0"?>
<!DOCTYPE resource-action-mapping PUBLIC
 "-//Liferay//DTD Resource Action Mapping 6.2.0//EN"
 "http://www.liferay.com/dtd/liferay-resource-action-mapping_6_2_0.dtd">

<resource-action-mapping>
    <resource file="resource-actions/portal.xml" />
    <resource file="resource-actions/announcements.xml" />
    <resource file="resource-actions/asset.xml" />
    <resource file="resource-actions/blogs.xml" />
    ...
</resource-action-mapping>

您的插件权限 XML 文件应该被命名default.xml并且应该放置在您项目的类路径中的一个目录中。 docroot/WEB-INF/src/resource-actions是标准位置。default.xml创建项目文件后,您应该创建一个名为的属性文件portlet.properties,其中包含对您的权限 XML 文件的引用。在您的portlet.properties文件中,创建一个resource.actions.configs以您的 portlet 的资源-操作映射文件(例如default.xml的相对路径命名的属性 作为其值。以下是此属性规范的外观:

resource.actions.configs=resource-actions/default.xml

您的权限 XML 文件必须包含一个根resource-action-mapping元素。查看Liferay Portal 存储库中Liferay 源代码的副本, 了解如何为核心 Liferay portlet 定义资源和权限。首先查看目录中的定义文件 portal-impl/src/resource-actions有关在 portlet 插件上下文中定义权限的简单示例,请查看 Liferay Plugins 存储库 并检查 portlet sample-permissions-portlet


https://help.liferay.com/hc/zh-cn/articles/360018179171-Adding-Permissions-to-Resources#related-topics

正文到此结束
该篇文章的评论功能已被站长关闭
本文目录