MediaWiki的问题';访问控制扩展

MediaWiki的问题';访问控制扩展,mediawiki,acl,access-control,Mediawiki,Acl,Access Control,我已经安装了MediaWiki扩展,但是如果搜索页面中包含的任何受访问控制的内容,它似乎会导致拒绝访问错误 有人在用这个分机吗 我只想在维基中隐藏一个页面,除了5个人 MediaWiki版本1.18.0 AccessControl 2.1版我通过添加另一个名称空间来放置需要保护的页面,从而解决了这个问题。然后,我通过实现searchablenamespaces钩子将名称空间从可搜索状态中移除 通过这样做,将永远不会仅仅通过搜索恰好位于访问控制页面中的文本来显示拒绝访问的页面 下面是$IP/ext

我已经安装了MediaWiki扩展,但是如果搜索页面中包含的任何受访问控制的内容,它似乎会导致拒绝访问错误

有人在用这个分机吗

我只想在维基中隐藏一个页面,除了5个人

MediaWiki版本1.18.0
AccessControl 2.1版

我通过添加另一个名称空间来放置需要保护的页面,从而解决了这个问题。然后,我通过实现searchablenamespaces钩子将名称空间从可搜索状态中移除

通过这样做,将永远不会仅仅通过搜索恰好位于访问控制页面中的文本来显示拒绝访问的页面

下面是$IP/extensions/NoSearchNameSpace/NoSearchNameSpace.php的代码

<?php
// This is a quick hack to remove certain listed namespaces from being searchable
// Just set a list of namespace IDs in the wgNoSearchNamespaces array in LocalSettings
// ie $wgNoSearchNamespaces = array(500,501) would remove 500 and 501 from being searched
$wgHooks['SearchableNamespaces'][] = 'noSearchNameSpace';
function noSearchNameSpace($arr){
    global $wgNoSearchNamespaces;
    foreach($wgNoSearchNamespaces as $ns){
        unset($arr[$ns]);
    }

    return $arr;
}

我在1.20.2中试过,当我搜索包含文本的页面时出现问题,将其放入搜索结果列表中,这引发了一个错误,因为AccessControl.php中的“hookUserCan”函数没有返回值。为了解决这个问题,我将AccessControl.php的第341行(“return doRedirect('AccessControl info anonymous');”修改为“return false”。这会强制搜索结果仅返回页面标题,如果未经授权的用户试图打开页面,则会出现权限错误。这不是一个完美的解决方案,但对于我来说已经足够了

Edited,这是一个更好的答案:

我对AccessControl.php程序做了一些修改,现在它似乎可以与MediaWiki用户组一起工作。剩下的问题是,受保护页面的标题显示在搜索结果中。这在MediaWiki主源代码(SpecialSearch.php,第562行左右)中可以修复,但根据该代码中的注释,它将破坏分页

这是我的git目录,可以解压缩到$IP/extensions/AccessControl:

以下是AccessControl.php文件:


请注意,这只在MediaWiki 1.20.2中进行了测试(简要)。我希望扩展的作者将回顾我所做的工作,并修复剩余的任何问题。

我通过添加

return false;
在说了这么多的话之后

doRedirect( 'accesscontrol-info-anonymous' );

在扩展的文档页面上,似乎搜索功能正在按设计工作。您尝试过其他方法吗?我通过添加另一个名称空间来解决它,以将需要保护的页面放入其中。然后,我通过实现searchablenamespaces挂钩将名称空间从可搜索状态中删除。您可以将自己的答案标记为正确答案我没有回答。很好地跟踪了这一点。如果有人正在寻找我为删除名称空间而编写的实际代码,我在上面添加了它。请不要破解代码,这会让升级变得痛苦,最终会杀死你的wiki,因为你会讨厌它。保证。
doRedirect( 'accesscontrol-info-anonymous' );