我已经阅读了有关 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 类中检查用户是否有权执行类似的操作:
try {
PortletPermissionUtil.check(themeDisplay.getPermissionChecker(), plid, PortalUtil.getPortletId(actionRequest), "ADD_FOO");
} catch(PrincipalException e){
System.out.println("NO ADD_FOO ACTION");
}
问题一:
什么是
<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 个参数的含义是什么?我不明白他们授予社区或 guest 哪些权限?
ResourceLocalServiceUtil.addResources(
entry.getCompanyId(), entry.getGroupId(), entry.getUserId(),BlogsEntry.class.getName(), entry.getPrimaryKey().toString(),
false,
addCommunityPermissions,
addGuestPermissions);
如何addResources
影响我的条目的权限?
问题三:
我如何使用 <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
为 false。
guest-default
权限是类似的,只是默认分配给 guest 用户(同样,除非 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 的资源权限框架进行管理(您可以选择不这样做,并以其他方式管理这些权限)。
关于permissions - 了解liferay的权限系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28352661/