我已经安装了AccessControl MediaWiki 扩展,但是如果您搜索甚至包含在受访问控制的页面中的任何内容,它似乎会导致访问被拒绝错误。
有人使用这个扩展吗?
我想做的就是对除 5 个人之外的所有人隐藏 wiki 中的一页。
MediaWiki 版本 1.18.0 访问控制版本 2.1
我已经安装了AccessControl MediaWiki 扩展,但是如果您搜索甚至包含在受访问控制的页面中的任何内容,它似乎会导致访问被拒绝错误。
有人使用这个扩展吗?
我想做的就是对除 5 个人之外的所有人隐藏 wiki 中的一页。
MediaWiki 版本 1.18.0 访问控制版本 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;
}
示例 LocalSettings.php 条目:
// Add two custom namespaces. One for ACL pages.
// one for pages that will be ACL'd that should not be searched.
$wgExtraNamespaces[500] = "ACL";
$wgExtraNamespaces[501] = "NoSearch";
// Include the NoSearchNamespace extension
require_once("extensions/NoSearchNamespace/NoSearchNameSpace.php");
$wgNoSearchNamespaces = array('500','501');
我用 1.20.2 尝试过,当我正在搜索的页面包含正在搜索的文本时出现问题,将其放在搜索结果列表中,这引发了错误,因为 AccessControl.php 中的“hookUserCan”函数没有返回一个值。为了解决这个问题,我将 AccessControl.php ("return doRedirect('accesscontrol-info-anonymous');" 的第 341 行修改为 "return false;"。这会强制搜索结果只返回页面的标题,如果未经授权的用户尝试打开它,则会出现权限错误。这不是一个完美的解决方案,但对于我的目的来说已经足够了。
编辑,这是一个更好的答案:
我对 AccessControl.php 程序进行了一些修改,现在它似乎可以与 MediaWiki 用户组一起使用。剩下的问题是受保护页面的标题显示在搜索结果中。这可以在主要的 MediaWiki 源代码(SpecialSearch.php,第 562 行附近)中修复,但根据该代码中的注释,它会搞砸分页。
这是我的git目录,可以解压到$IP/extensions/AccessControl:
https://ejc.s3.amazonaws.com/AccessControlGit.zip
这里只是 AccessControl.php 文件: http: //pastebin.com/WnyB6gBw
请注意,这仅在 MediaWiki 1.20.2 中(简单地)测试过。我希望扩展的作者能够审查我所做的并解决仍然存在的任何问题。
我通过添加修复了这个错误
return false;
在所有说的话之后
doRedirect( 'accesscontrol-info-anonymous' );