dokuwiki 的管理和使用

Posted 车子 chezi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dokuwiki 的管理和使用相关的知识,希望对你有一定的参考价值。

文章目录


dokuwiki 很适合作为中小团队的知识库,在公司内网部署。考虑到我所在公司的现状,我认为 dokuwiki 要有以下的功能:

  1. 知识管理。用于知识的沉淀和分享,每个人都可以创建页面,也可以多人协同编辑页面;历史版本可追溯,可恢复。页面之间可以互相引用。

  2. 树形结构。

    阳志平老师在他的博文中提到:

    我提过多次的 MIT 认知科学家 Joshua B. Tenenbaum 发表在 PNAS 的论文( The discovery of structural form )中,比较了抽象知识的不同表征结构……最终还是意识到,人类的最佳知识结构是树形结构。只有树形结构,才是最符合人类认知特点的一种结构,从树的上一层到下一层,是具备唯一通道,便于大脑将知识从记忆底层快速提取出来,符合人类大脑是个认知吝啬鬼的特点;树又是兼具横向扩展与纵向扩展能力的最优雅的结构。

    ——Zotero(2):作为知识管理工具的Zotero - 阳志平的网志

  3. 权限管理。比如 Leaders 有权限删除页面,普通成员仅可以创建,但不能删除。再比如 A 部门的员工看不到 B 部门的页面。

  4. 文档管理。可以把文档上传到服务器,页面可以引用文档;搜索文档方便;有管理文档的接口,便于增删改查。

  5. 上传附件方便。编辑页面的时候,可以很方便地插入图片,上传附件。

  6. 下载文件方便。

  7. 如果有 PDF、DOC 等格式的预览就更好了。

咱们一个一个说,看看 dokuwiki 是否支持这些功能,如果不支持怎么弄。

对于 1,dokuwiki 天然就有。关于版本控制,后文会专门用一节介绍。

对于 2,其实 dokuwiki 的页面存储本来就是树形结构,我们只是需要一个插件 indexmenu,把目录树显示出来,见后文的“插件 indexmenu”、“增加页面”

对于 3,dokuwiki 也是天然支持,后文会讲。

对于 4,参见后文的“上传文档”、“页面里引用文件”、“文档管理”

对于 5,上传附件已经说过了,插入粘贴的图片可以用插件 imgpaste,请参考我的上一篇博文。

对于 6,很简单,点击链接就可以。

对于 7,PDF 是自带预览的,其他格式似乎预览不了。

版本控制

DokuWiki 存储每一个 Wiki 页面的所有版本,允许用户比较当前版本和任何历史版本。使用了和 MediaWiki 类似的差异引擎(比较版本间的差异的软件)。通过计时锁定机制,可以防止不同用户编辑同一个页面时产生冲突。2012 年 1 月发布的新版中,加入了媒体文件版本控制。

点击页面右边的“修订记录”,如下图

点击眼镜图标就可以看到差异,第一次用这个功能的时候,是真的惊艳到我了。

页面间互相引用

可以用语法

Internal links are created by using square brackets. You can either just give
a [[pagename]] or use an additional [[pagename|link text]].

也可以用按钮

插件 indexmenu

下载地址: https://www.dokuwiki.org/plugin:indexmenu

这个插件最有用的地方是可以在边栏增加一个导航列表。

设置方法:安装完之后,在 sidebar 页面的尾部添加
indexmenu>:

增加页面

上面图片的左上角,有一个增加页面的小工具,因为我安装了 addnewpage 插件

下载地址:http://www.dokuwiki.org/plugin:addnewpage

设置方法可以参考我的上一篇博文。

在 wiki 页面的任何位置放置 NEWPAGE ,以获得一个新的页面标题文本输入框和一个名称空间选择下拉菜单。一般都放在 sidebar 页面。

你可以在下拉菜单中选择某个名称空间,然后输入页面名称,创建新的页面,系统会直接跳到新页面让你编辑。你也可以同时创建名称空间和页面,用英文的冒号分隔,例如在输入框里面输入:

研究院:物理所:凝聚态物理

这将创建命名空间研究院,子命名空间物理所,最后在物理所下面创建页面凝聚态物理

删除页面

把文章内容删空,页面就自动删除了。没有文章的命名空间也会被自动删除。

上传文档

上传文件就点这个按钮。

上传的时候,要注意命名空间,看看是不是你想要的。

首先,选择本地文件,然后确认命名空间。如果想创建命名空间,那就用前文介绍过的冒号语法,比如我要创建命名空间 chezi,那就手动在文件名的前面加上 chezi:

最后点击上传。

因为是上传媒体文件,而不是创建页面,在侧边栏是看不到新的命名空间的,需要点击媒体管理器。

可以看到 chezi 被成功创建。

页面里引用文件

还是刚才那个按钮,搜索你要引用的文件,点击文件名就可以了。

这时候文本编辑框会自动插入

:软件部:协议组:chezi:the_eighty_five_percent_rule_for_optimal_learning.pdf |

保存后的效果是:

文档管理

先说搜索文档,其实很简单,在右上角的搜索框输入关键字。这里就不演示了。

dokuwiki 自带的管理文档的接口是“媒体管理器”

其实功能还比较全,比如有上传、搜索、删除、历史等。

但是我发现了一个缺点,就是无法显示出所有文件,只能分命名空间来显示,一次只能展示一个命名空间。

如何一次展示出所有文件呢?有一个插件:filelisting

下载地址:https://www.dokuwiki.org/plugin:filelisting

我在根部命名空间增加了一个页面,叫文件目录,在它的编辑栏里面输入 filelisting

就有了这样的效果:

总归可以展示出所有文件了。

Filter 这个框子可以输入文件名过滤。

用户管理

这里的“组”要说明一下。

在用户管理中,用户总是属于某个组。有两个组有点特别:

  • @ALL。每个人,即便是没有登录的人,都属于这个组。你可以使用这个组来限制所有人的访问权限(作为默认设置),然后再对特定用户放宽权限。
  • @user。所有自主注册的用户,默认都属于这个组。用这个组来给予“已登入”用户权限。这个组的名字可以通过默认组选项配置。与虚拟的“ALL”组不同,“user”组是真实的组,是在使用简单身份验证后端时所有用户默认加入的组。如果你使用不同的验证后端,你需要使用这个后端所提供的组。

在内部以及 ACL(访问控制列表)管理器中,组由“@”前缀和组名来表示。

添加用户的时候,不用事先创建组名,直接输入新的组名就可以。

权限管理

可以参考 https://www.dokuwiki.org/zh:acl

这里简单说一下。

访问控制可以针对页面或者命名空间。共有7种权限:读取编辑创建上传删除以及管理。高权限会包含低权限,其中读取是最低的权限,删除是最高的权限。需要注意的是,创建、上传和删除权限只能应用于命名空间。

为命名空间设置的规则也会应用到其下的媒体文件和页面。

当 Dokuwiki 检查它应该给用户何种权限时,它会使用所有匹配该用户及其所在组的规则。最终应用的权限规则由以下方式选出:

  • 规则的应用范围越接近指定的页面,优先级就越高 —— 我们称之为“specific matching”
  • 当多个规则的应用范围相同,给予最高权限的那个规则会被采用。

想方便地添加新规则或更改已存在的规则,你需要使用“管理”菜单中的 ACL 管理器。如下图:

注意: 删除权限仅影响媒体文件。页面可以删除(和恢复)这个属于编辑权限。有上传权限但没有删除权限的人不能覆盖现有的媒体文件。

基本上,增加一条新的 ACL 规则有三个步骤:

  1. 从左上角的树状导航栏中选择需要限制的命名空间或者页面
  2. 选择需要应用 ACL 规则的组或人
  3. 设置适当的权限

已有规则可以在 ACL 管理器下面的表格中修改或者删除。

文中举了一个例子,我们看看。规则列表如下:

This time we look what rules will match for different users when trying to access the page private:bobspage.

当访问命名空间 private 下的 bobspage 页面的时候,我们看看对每个用户要应用什么规则。

  1. abby, 普通用户

    根据她所属的组,#1, #2, #4 都匹配;规则的应用范围越接近指定的页面,优先级就越高,所以应用规则 #4,所以 abby’s permissions level is 0

  2. bob, 普通用户

    #1, #2, #4, #6 都匹配,#6 对应的范围完全匹配指定的页面,所以 bob’s permission level is 16

  3. bob 忘记了登录,但是要访问 private:bobspage.

    #1 & #4 匹配,#4 的范围更接近,所以 bob’s permission level while not logged in is 0

  4. charlie, @staff 组的成员

    #1 - #5 这 5 个规则都匹配,#4 和 #5 对应的范围最接近指定页面,根据当多个规则的应用范围相同,给予最高权限的那个规则会被采用,所以应用规则 5,charlie’s permission level is 16

高级话题:可以在 acl 中使用用户通配符,本文就略了。

回到现实应用,对于企业来说,经常是 A 部门不能访问 B 部门的页面,反之亦然。针对这个应用场景,如何设定 ACL 规则呢?

前文已经说了:

@ALL。每个人,即便是没有登录的人,都属于这个组。你可以使用这个组来限制所有人的访问权限(作为默认设置),然后再对特定用户放宽权限。

也就是说,指导思想是先宽再严

说明:

  1. 对于 @ALL,默认规则是读取
  2. 对于硬件组 @hw,在“硬件部”这个命名空间有最高权限
  3. 出于信息保密,对于 @ALL,在“硬件部”这个命名空间无权限

这样一来,只有硬件组 @hw 的用户可以访问“硬件部”这个命名空间。软件部的设置也是类似的,就不赘述了。

以某个硬件组成员的身份登录,可以看到:

  1. 只能在硬件部命名空间里面增加页面
  2. 看不到软件部的页面

同理,以某个软件组成员的身份登录,可以看到:

  1. 只能在软件部命名空间里面增加页面
  2. 看不到硬件部的页面

当然,要达到这种效果,肯定还有其他制定规则的方法,本文仅是抛砖引玉。

【end】

以上是关于dokuwiki 的管理和使用的主要内容,如果未能解决你的问题,请参考以下文章

git进阶之.gitignore 和 .gitmodules

Glob模式 linux和.gitignore

git 之gitignore配置

Git忽略规则.gitignore梳理

Git忽略规则.gitignore梳理

Git忽略规则.gitignore梳理