Liferay6.2为资源添加权限
公共公告板很棒。任何人都可以将任何事情告知他人。另一方面,任何人都可以在公告板上发布任何内容。其中一些内容可能与社区无关。其他内容可能不合适。因此,您有时需要一种方法来限制谁可以发布或访问内容。
幸运的是,无论您的 portlet 做什么,对它及其内容的访问都可以通过权限进行控制。继续阅读以了解 Liferay 的权限系统以及如何向您的应用程序添加权限。
Liferay 的权限系统
Liferay 的权限系统使用灵活的机制来定义给定用户可以在门户或特定 portlet 的上下文中执行的操作。门户和 portlet 开发人员将可以在门户或 portlet 中执行的操作分解为不同的操作。授予特定角色执行操作的能力的行为是授予权限的行为 。在 Liferay 中,权限不会直接授予用户。相反,权限被授予角色。反过来,角色可以分配给特定的用户、站点、组织或用户组。
开发人员需要定义适合其应用程序业务逻辑所需的不同类型的操作。他们无需担心哪些用户将获得哪些权限。确定和配置操作后,门户管理员可以通过分配角色向用户、站点、组织或用户组授予执行这些操作的权限。管理员可以使用门户的管理工具向角色授予权限,也可以使用各个 portlet 的权限 UI。
在本文中,您将了解 Liferay 应用程序开发人员如何使用 Liferay 的权限系统为门户管理员提供与默认 Liferay 应用程序相同级别的权限控制。
在继续之前,请确保您了解这些关键术语:
操作:可以由门户用户执行的操作。例如,可以在留言板门户进行的操作包括ADD_TO_PAGE
, CONFIGURATION
,和VIEW
。可以在留言簿实体进行的操作包括ADD_ENTRY
,DELETE
,PERMISSIONS
,UPDATE
,和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 添加权限:
d efine所有的资源和他们的权限。这是本教程中介绍的步骤。
ř egister中的权限系统中的所有定义的资源。这也称为添加资源。此步骤在教程添加和删除资源 中讨论 。
A将必要的权限与资源相关联。此步骤在教程向用户公开权限接口中讨论。
ç返回资源之前赫克许可。此步骤在教程检查权限中进行了描述。
定义所有资源和权限
第一步是定义您的资源以及可以对它们定义的操作。这里使用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_GUESTBOOK
和ADD_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