gpt4 book ai didi

java - Liferay 只显示有 child 的页面

转载 作者:行者123 更新时间:2023-11-30 08:57:00 25 4
gpt4 key购买 nike

我在 Liferay 上使用权限,但遇到了问题。我有这个页面结构:

->Page 1
---->Child page 1
---->Child page 2
---->Child page 3
->Page 2
(...)

每个子页面 (1,2,3) 都有不同的权限。我想要的是让“第 1 页”仅对至少有权访问一个子页面的用户可见。另一方面,如果用户无权访问任何子页面,则页面不应可见。

我已经删除了“第 1 页”的所有权限,希望它具有子权限,但有了这个页面始终不可见。

我该怎么做才能解决这个问题?

**不完美的解决方案**

好吧,在第 1 页的权限中,我设置为“对所有登录用户可见”,并为子页面提供了所需的权限,然后我将 navigation.vm 更改为:

<ul id="mainTopMenu">
## First Level Generation
#foreach ($nav_item in $nav_items)

#if ($nav_item.hasChildren())

<li>
<a> $nav_item.getName()</a>
<ul>
## Second Level Generation
#foreach ($nav_child in $nav_item.getChildren())
<li>
<a href="$nav_child.getURL()">
$nav_child.getName()
</a>
</li>
#end

</ul>
</li>
#end
</ul>

此代码所做的始终是显示具有子项的页面。但这只有在我只有带 child 的页面时才有效,但事实并非如此。我有 3 个没有 child 的页面,所以为了解决这个问题,我做了这个 else 声明:

#else
#set ($str = $nav_item.getURL().substring($nav_item.getURL().lastIndexOf("bc"),$nav_item.getURL().length()))

#if ($str.equals("bclogin") || $str.equals("bchome") || $str.equals("bcmaintenance"))
<li>
<a href="$nav_item.getURL()">
$nav_item.getName()
</a>
</li>
#end
#end

这解决了我的整个问题。这段代码的唯一问题是我需要指定没有 child 的页面的名称女巫这不是一个好原则,因为每次我添加/删除/编辑一页时我都需要编辑这段代码。

我正在努力寻找更好的解决方案,并且我愿意接受一些想法 :)

最佳答案

I've already removed all the permissions to 'Page 1' expecting that it assumes the children permissions but with this the page is always invisible.

您可以将页面和子页面之间的关系视为子文件夹中的文件夹。因此,如果您从文件夹中删除权限,那么......即使您拥有子文件夹的权限,您也不会看到该文件夹​​和子文件夹。

What i want is to make 'Page 1' only visible to users who have at least access to one child page.

我能想到的是,您可以照常在 Page 1 上拥有 VIEW 权限,并自定义呈现页面导航的模板。在该模板中,您可以检查每个子页面的权限,即使有权限,您也可以设置一个标志以显示 Page 1,否则不显示。

这样做的唯一缺点是,如果用户直接输入 Page 1 的 URL,他将能够看到 Page 1 内容(如果有的话)。我们也可以阻止它,但我认为使用服务前操作或过滤器 Hook 会变得有点乏味。

希望这能让您对该方法有所了解。

关于java - Liferay 只显示有 child 的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com