我们正在使用MediaWiki inhouse来获取我们的软件和硬件文档。对于我们的外部用户 - 客户,项目合作伙伴 - 来说,授予/撤销对部分文档的“读取权限”并不容易实现。我们如何根据用户或角色访问权限控制对文档某些区域的读访问权?
编辑:我问这个是因为我不想回到文档的“旧式” - 将Office文档存储在几十个不同的位置,没有人知道他们在哪里是。因此,如果没有办法让用户只能访问他们的产品信息,我担心管理层会放弃整个MediaWiki解决方案并引入“新的更好”的东西。 (这可能意味着我们必须将所有内容转移到新系统,格式和超链接将丢失等......)。
非常感谢您的评论和答案!
http://meta.wikimedia.org/wiki/Access_control
提供了一些有趣的信息例如,有一个HiddenWiki补丁似乎正在积极开发中,位于http://sourceforge.net/projects/hiddenwiki/
答案 0 :(得分:3)
MediaWiki并非真正用于禁止注册用户查看网页。我不认为你可以在没有一些痛苦的情况下做到这一点。
来自documentation(重新格式化):
让一个页面对某些用户起作用,但对其他用户不可见,例如在大多数论坛软件中,这是一个非常不同的事情。 MediaWiki专为两种基本访问模式而设计:
我的学校以您想要的方式使用wiki。我的一个朋友把他们安排好了。他不得不广泛地破解软件以使其发挥作用。根据我在MediaWiki中挖掘的经验,您可以在这里度过一段愉快的时光。
您有四个选项
答案 1 :(得分:1)
正如其他人所指出的,这不是MediaWiki的核心功能。
最简单的解决方案可能是拥有带有Wiki间链接的公共和私有wiki。 (首先复制原始wiki并从公共安装中删除不需要的页面,然后添加重定向)。
另一种可能性是为公共和私有页面设置单独的命名空间,并根据配置文件中的命名空间限制可访问性。
答案 2 :(得分:1)
这听起来好像你正试图将MediaWiki放在不一定要去的地方,所以我建议选择一个更好的工具。
随着wiki的发展,我们经历了一个MediaWiki阶段,但最终选择MindTouch Deki,因为它看起来更好,行为更好,而且更易于管理(对于访问控制等)。你可以在他们的网站上找到所有细节,我可以说它开箱即用。
这是好的部分:现在有一个MediaWiki to Deki converter可用。我不能保证它(新的和所有的),但由于所有部件都是免费的,我的建议是你花几个小时试着看看你能做些什么,你可能只是喜欢结果。
答案 3 :(得分:0)
您可以使用网页访问限制扩展程序:http://www.mediawiki.org/wiki/Extension:Page_access_restriction和分组来执行此操作。
话虽如此,MediaWiki doesn't recommend you do it...
(从my answer to Stack Overflow question MediaWiki payment gateway被盗。)
答案 4 :(得分:0)
您可以创建MediaWiki Namespaces并将特定用户分配给特定的命名空间。您必须要小心,但是在没有编辑LocalSettings.php文件的情况下,新站点名称中的页面默认情况下不会显示在站点上的搜索中。有关详细信息,请参阅the documentation。
请参阅此semi-related thread。
答案 5 :(得分:0)
如果您将页面命名为X/Y
,则链接将为wiki/X/Y
,这意味着您可以在任何良好的代理中设置访问权限,例如基于“目录”的Apache HTTP。您可以将代理连接到Windows域或只是用户名列表。
答案 6 :(得分:0)
这是我的解决方案。
我们将wiki保留在.htpasswd后面,并且子域(external.wiki.mydomain.co.uk)上的php脚本获取页面并提供如果它与允许的页面数组匹配。
它还会删除侧边栏和页脚等。这可能取决于你的wiki使用的样式,strip_content()函数可能需要调整。
$allowed = array( "Architecture",
"Database_Design",
"Authentication",
"Branding");
//put your own .htpasswd credentials in here
$username = "USERNAME";
$password = "P@ssw)rd";
$url = "http://internal.wiki.mydomain.co.uk";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
//I have not mod-rewritten the index.php out of the url, hence the 2 lines below...
$page = str_replace("/index.php/", "",$_SERVER['PHP_SELF']);
$page = $page == '/index.php' ? "Home" : $page;
$links = "<div><a href = '/' >Home</a>";
$links .= isset($_SERVER['HTTP_REFERER']) ? ' - <a href = "' . $_SERVER['HTTP_REFERER'] . '" >Back</a>' : '';
$links .= "</div>";
if (!in_array($page, $allowed)) {
$out = "<div>Access denied to " . $page . '</div>' . $links;
} else {
curl_setopt($ch, CURLOPT_URL, $url . "/index.php/" . $page);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
$out = $links . '<br />' . strip_content($output);
}
curl_close($ch);
echo $out;
/**
* Strip out unwanted bits of the page, such as side bar and header and footer.
* @param string $html The raw html
* @return string
*/
function strip_content($html)
{
$patterns = array( '!<span class="editsection">.*?<\/span>!is',
'@<!-- footer -->.*?<!-- /footer -->@is',
'@<!-- panel -->.*?<!-- /panel -->@is',
'@<!-- header -->.*?<!-- /header -->@is'
);
return preg_replace($patterns, "", $html);
}
您可以通过在开头添加登录来扩展此功能,以便脚本可以为不同的用户选择不同的页面子集。
答案 7 :(得分:0)
如果您有私人wiki,则可以使用LocalSettings.php中的标记$wgBlockDisablesLogin = true
来禁用被阻止用户的登录功能(然后阻止某人撤销所有访问权限)。另一种选择是将整个wiki放在vpn后面。
参考文献: