1

我们需要在普通用户创建的每个 IGFolder 中创建隐藏的“系统”子文件夹。 图片库 Portlet 主要驻留在所有普通用户的私有社区布局上。Portlet 及其配置是预先生成的,因此普通用户无法更改它们(layout.user.[public|private].layouts.modifiable=false)。

为什么我们要这样做 在那些系统文件夹中,我们将存储自动生成的上传图像的大小版本。这是因为我们还导入了代表图片库的 WebContent/JournalArticle,这些图片库本身提供了不同大小的图片。最后,我们希望以相同的方式显示 IGFolders 和 JournalArticle 内容,而无需太多特殊代码。

我已经尝试过的

  • 我试图通过权限(resource-actions/imgallery.xml => owner-defaults)来做到这一点,但在他自己的社区页面上,用户也是 CommunityAdmin,这赋予了他执行和查看几乎他想要的任何内容的权利。(PermissionCheckerBagImpl.isCommunityAdminImpl)

  • 我想过创建不属于用户/他的私人社区的布局,但是在用户所属的另一个社区的公共页面上测试它并没有奏效。我根本无法让系统显示当前用户的 IGFolders,而是显示社区的文件夹。

  • 对子文件夹使用另一个用户和组也不起作用,如果 groupId 与父文件夹中的一个不匹配,则父文件夹 id 设置为 0,因此它们根本就是更长的子文件夹 (IGFolderLocalServiceImpl.getParentFolderId)。

什么可能有效,我可能只是不正确

  • 更改图片库 portlet/布局的所有者

  • 以我没想到的方式摆弄许可

  • 添加另一层组/社区

  • 将系统文件夹放在其他地方(这当然会导致
    更多代码来维护它们与
    其父文件夹之间的关系)

当然,我可以使用 expandos 来标记系统文件夹——无论如何我都必须这样做——并在视图中检索后隐藏它们,但是我也不得不摆弄文件夹计数,我不想这样做,因为我觉得这不是做事的方式。

任何想法表示赞赏,请不要害羞详细说明,我对 Liferay 很陌生

4

1 回答 1

1

您可以创建钩子插件并在其中覆盖(可能是这个文件)

/portal/portal-web/docroot/html/portlet/image_gallery/view_folders.jsp

在那里,您可以添加代码以忽略您的“系统”文件夹(如果存在)。也许所有“系统”文件夹都可以具有您可以测试的相同名称(例如“_SYSTEM_FOLDER_”)。

请注意,这只是隐藏文件夹,因此如果有人知道 folderId 并有权查看/编辑它,他们可以制作 URL 来访问它。

于 2011-11-17T20:24:48.727 回答