xwiki - 如果权限为Read = False,则获取Page的标题

时间:2014-09-25 09:17:52

标签: velocity xwiki

我正在尝试创建一个自动索引,其中将显示空格中的所有页面。类似的东西:

  • 空间1(公共)
    • 第1页(公开)
    • Page 2 (私人)
      • 第2.1页(公开)
  • 太空2(公众)
    • Page A (私人)
    • Page B(公开)

其中:

  • public :(权利:Read=True)用户可以点击访问内容。
  • private :(权利:Read=False)用户可以看到标题,但无法点击。

如果用户无权read我想要的页面,至少他可以看到页面的标题,因为我可以继续列出能够read的页面。子。

我有什么:

#foreach($space in $xwiki.spaces) 
    #set($WebHome = $space + ".WebHome")
    #getChildrenOf($WebHome)
#end

现在递归getChildrenOf宏是:

#macro(getChildrenOf, $docName)
    #foreach($name in $xwiki.searchDocuments('where doc.parent = ? or doc.parent = ? order by doc.name', [$docName, "xwiki:$docName"]))
         #if($xwiki.hasAccessLevel('view', "xwiki:$name"))
             [[$xwiki.getDocument($name).getPlainTitle()>>$name]]
         #else
             $xwiki.getDocument($name).getPlainTitle()
         #end
         #getChildrenOf($name)
    #end
#end

结果:

  • else我收到一个显示功能$xwiki.getDocument($name).getPlainTitle()的纯文本,而不是页面的标题。

  • 如果我只是在$name中写else我得到的是Space_1.Page_2而不是第2页的标题。

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:0)

当当前用户在$ name上没有查看权限时,

$xwiki.getDocument($name)返回null,当方法返回null时,Velocity行为将显示代码。

您可以使用$xwiki.getDocumentAsAuthor($name)来访问具有脚本作者权限的文档。见http://nexus.xwiki.org/nexus/service/local/repositories/releases/archive/org/xwiki/platform/xwiki-platform-oldcore/6.2/xwiki-platform-oldcore-6.2-javadoc.jar/!/com/xpn/xwiki/api/XWiki.html#getDocumentAsAuthor%28org.xwiki.model.reference.DocumentReference%29