了解liferay的权限系统
Understanding liferay's permission system
我已经阅读了关于 liferay 的所有主题。我已经阅读了很多教程,但不幸的是我无法理解 liferay 权限的概念。
如果你能回答我的问题,我将不胜感激。
只有我知道liferay 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 class 中检查用户是否有权执行类似的操作:
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),当我检查用户的权限时,他没有权限。我应该在哪里使用检查?
在将实体存储到基础之前或之后使用 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
有问题的片段是分配给某些用户类型 以对资源执行某些操作 的默认权限。 ResourceLocalServiceUtil
等中的资源是数据库中其他 真实 对象的扩展(例如 JournalArticle
或者,在您的示例中,me.pd.test.model.Foo
).因此,资源 是具有由 Liferay 管理的权限(即对资源类型的对象执行操作的权限)。
虽然您的对象可能有它的 groupId
或 companyId
,但与其相关的资源可能有它自己的值,不幸的是,程序员的职责是保持这些冗余资源值最新-日期。
community-default
(在最近的 Liferay 版本中重命名为 site-member-defaults
)是分配给特定资源所属社区(即站点)成员的默认权限。因此,在您的示例中,如果您在 Baz 社区中创建了一些 Foo 类型的 Bar 对象,则 Baz 社区的成员应该默认分配 ADD_FOO
和 VIEW
Bar 对象的权限。也就是说,除非 addResource
方法中的 addCommunityPermissions
为假。
guest-default
权限类似,只是默认分配给来宾用户(同样,除非在创建资源时 addGuestPermissions
为 false)。
回复:问题 2
最后这些参数是 boolean portletActions, boolean addCommunityPermissions, boolean addGuestPermissions)
最后两个应该已经很容易理解了——如果您将 false
传递给它们,您实际上忽略了在您的权限 XML.
中定义的默认操作权限
portletActions
告诉您是否要添加与 portlet 本身 (true
) 或 portlet 模型 (false
) 相关的权限资源。
现在我不是 100% 确定,但我认为您永远不需要将 portletActions
传递为 true,因为 Liferay 本身应该管理 portlet 权限资源。
回复:问题 3
每当您的 portlet 管理一些持久对象(想想 book-catalogue
portlet,它出现在许多 portlet 教程中,您可以在其中管理数据库中的书籍等)并且您希望通过 Liferay 管理这些对象的权限资源权限框架(您可以选择不这样做,并以其他方式管理这些权限)。
我已经阅读了关于 liferay 的所有主题。我已经阅读了很多教程,但不幸的是我无法理解 liferay 权限的概念。
如果你能回答我的问题,我将不胜感激。
只有我知道liferay 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 class 中检查用户是否有权执行类似的操作:
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),当我检查用户的权限时,他没有权限。我应该在哪里使用检查?
在将实体存储到基础之前或之后使用 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
有问题的片段是分配给某些用户类型 以对资源执行某些操作 的默认权限。 ResourceLocalServiceUtil
等中的资源是数据库中其他 真实 对象的扩展(例如 JournalArticle
或者,在您的示例中,me.pd.test.model.Foo
).因此,资源 是具有由 Liferay 管理的权限(即对资源类型的对象执行操作的权限)。
虽然您的对象可能有它的 groupId
或 companyId
,但与其相关的资源可能有它自己的值,不幸的是,程序员的职责是保持这些冗余资源值最新-日期。
community-default
(在最近的 Liferay 版本中重命名为 site-member-defaults
)是分配给特定资源所属社区(即站点)成员的默认权限。因此,在您的示例中,如果您在 Baz 社区中创建了一些 Foo 类型的 Bar 对象,则 Baz 社区的成员应该默认分配 ADD_FOO
和 VIEW
Bar 对象的权限。也就是说,除非 addResource
方法中的 addCommunityPermissions
为假。
guest-default
权限类似,只是默认分配给来宾用户(同样,除非在创建资源时 addGuestPermissions
为 false)。
回复:问题 2
最后这些参数是 boolean portletActions, boolean addCommunityPermissions, boolean addGuestPermissions)
最后两个应该已经很容易理解了——如果您将 false
传递给它们,您实际上忽略了在您的权限 XML.
portletActions
告诉您是否要添加与 portlet 本身 (true
) 或 portlet 模型 (false
) 相关的权限资源。
现在我不是 100% 确定,但我认为您永远不需要将 portletActions
传递为 true,因为 Liferay 本身应该管理 portlet 权限资源。
回复:问题 3
每当您的 portlet 管理一些持久对象(想想 book-catalogue
portlet,它出现在许多 portlet 教程中,您可以在其中管理数据库中的书籍等)并且您希望通过 Liferay 管理这些对象的权限资源权限框架(您可以选择不这样做,并以其他方式管理这些权限)。