5

我们在内部使用 MediaWiki 作为我们的软件和硬件文档。似乎为我们的外部用户(客户、项目合作伙伴)授予/撤销对部分文档的“读取访问权限”并不容易实现。我们如何根据用户或角色访问权限控制对文档某些区域的读取访问?

编辑:我问这个是因为我不喜欢回到文档的“旧样式”——将 Office 文档存储在几十个不同的位置,没有人知道它们在哪里。所以如果没有办法让用户只能有限地访问他们的产品信息,恐怕管理层会放弃整个 MediaWiki 解决方案并引入一些“新的和更好的”东西。(这可能意味着我们必须将所有内容转移到新系统,格式和超链接会丢失等......)。


非常感谢您的评论和回答!

一些有趣的信息可以在http://meta.wikimedia.org/wiki/Access_control找到

例如,有一个 HiddenWiki 补丁似乎正在积极开发中,位于http://sourceforge.net/projects/hiddenwiki/

4

8 回答 8

3

MediaWiki 并不是真正为禁止注册用户查看页面而设计的。我不认为你可以在没有痛苦的情况下做到这一点。

文档(重新格式化):

让页面对某些用户正常运行但对其他人不可见,例如在大多数论坛软件中是可能的,这是完全不同的事情。MediaWiki 设计用于两种基本的访问模式:

  • 每个人都可以查看 wiki 上的每一页(少数特殊页面可能除外)。这是维基百科及其姊妹项目使用的模式。
  • 匿名用户只能查看主页和登录页面,不能编辑任何页面。这在技术实现方面与上述基本相同(只是对每个页面视图进行额外检查),这就是它存在的原因。这是某些私人 wiki 使用的操作模式,例如各种 Wikimedia 委员会使用的那些。

我的学校以您想要的方式使用 wiki。我的一个朋友设置了它们。他不得不对软件进行广泛的破解才能使其正常工作。根据我在 MediaWiki 中挖掘的经验,您正在尝试让这个工作变得有趣。

你有四个选择

  • 获取一个 MediaWiki 插件并升级它。
  • 每次升级时自己破解并重做工作。
  • 使用不同的维基软件。
  • 如上所述设置一个新的私人维基。
于 2009-04-02T12:53:47.983 回答
1

正如其他人所指出的,这不是 MediaWiki 的核心功能。

最简单的解决方案可能是拥有一个带有跨 wiki 链接的公共和私人 wiki。(首先复制原始 wiki 并从公共安装中删除不需要的页面,并添加重定向)。

另一种可能性可能是为公共和私人页面设置单独的命名空间,并根据配置文件中的命名空间限制可访问性。

于 2009-04-08T08:41:27.393 回答
1

听起来您确实在尝试将 MediaWiki 带到它不一定想去的地方,所以我建议选择一个更好的工具

随着 wiki 的发展,我们经历了 MediaWiki 阶段,但最终选择了MindTouch Deki,因为它看起来和行为都更好,而且更易于管理(例如访问控制)。你可以在他们的网站上找到所有细节,我只能说它开箱即用。

好的部分来了:现在有一个MediaWiki 到 Deki 的转换器可用。我不能保证它(是新的和全部),但由于所有部件都是免费的,我的建议是你花几个小时尝试看看你能做什么,你可能会喜欢这个结果。

于 2009-04-09T07:02:55.640 回答
0

您可以使用页面访问限制扩展:http ://www.mediawiki.org/wiki/Extension:Page_access_restriction和组来执行此操作。

话虽如此,MediaWiki 不建议您这样做...

(从我对 Stack Overflow 问题MediaWiki 支付网关的回答中窃取。)

于 2009-04-02T15:21:48.620 回答
0

您可以创建MediaWiki 命名空间并将某些用户分配给特定的命名空间。不过,您必须小心...如果不编辑 LocalSettings.php 文件,默认情况下,新名称空间中的页面不会出现在网站上的搜索中。有关更多信息,请参阅文档

请参阅此半相关线程

于 2009-04-07T20:05:55.197 回答
0

如果您命名一个页面X/Y,则链接将为wiki/X/Y,这意味着您可以在任何好的代理中设置访问权限,例如基于“目录”的 Apache HTTP。您可以将代理连接到 Windows 域或只是用户名列表。

于 2009-04-12T16:11:38.827 回答
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']) ? '&nbsp;-&nbsp;<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);
    }

您可以通过在开头添加登录名来扩展它,以便脚本可以为不同的用户选择不同的页面子集。

于 2013-12-18T12:38:12.243 回答
0

如果您有私人 wiki,那么您可以使用$wgBlockDisablesLogin = trueLocalSettings.php 中的标志来禁用被阻止用户的登录功能(然后只需阻止某人撤销所有访问权限)。另一种选择是将整个 wiki 放在 vpn 后面。

参考:

于 2014-02-28T21:10:09.667 回答