DokuWiki

  • 介绍

DokuWiki是个PHP语言实现的wiki,很适合在一个团队中作为文档编写的系统。DokuWiki不需要数据库,而且支持很多插件。

本文会详细介绍DokuWiki中的重要文件以及插件如何编写。

  • 目录结构

conf/acl.auth.php 访问控制配置文件

conf/local.php 全局性的配置文件,包括:站点名称、语言、是否使用ACL、认证方式、超级用户组名称等等

data/pages生成的页面

lib

lib/plugins 插件目录

inc/lang/多语言目录,子目录是语言国家标示

inc/auth.php 认证过程实现的主要文件

  • 认证过程实现

inc/auth.php该文件是认证(登录)工程的主要文件。下面对重要函数作简单介绍:

auth_setup该函数会对认证系统进行初始化,而且是在init.php文件结尾中被调用。

该函数中,首先定义了一些全局变量,之后判断当前使用的认证插件(从这一点看出来,写完一个认证插件之后,除了要启用插件之外,还需要在系统设置中更换认证方式;再换句话说,同时只能支持一种认证插件)。

然后把接收到的用户信息传递给钩子函数(auth_login_wrapper),继而调用函数auth_login。而在auth_login函数中,如果用户名和密码不为空的话,就会调用认证插件的checkPass函数(这个我简单说一下,在认证插件的父类中有一个默认实现——给出报错信息,所以checkPass函数是必须要覆盖的)。

最后,加载ACL。

  • 错误信息以及多语言

错误信息是保存在全局变量lang中,之后调用函数msg(在文件inc/infoutils.php:298中定义)来实现多语言。下面是示例代码:

global $lang;

msg($lang['regmissing'], -1);

  • 权限级别

下面的文件是DokuWiki通过ACL对权限的配置,定义为文件(conf/acl.auth.php)中:

  • 插件开发

插件父类为:DokuWiki_Plugin

认证插件父类为:DokuWiki_Auth_Plugin

plugin.info.txt是插件的描述文件,下面给出一个例子:

  • 认证插件开发

首先,要在插件目录(lib/plugins)中新建一个文件夹(authwebService);

然后,在当前目录中新建两个文件auth.php、plugin.info.txt;

最后,在auth.php中添加一个类继承DokuWiki_Auth_Plugin,实现认证逻辑。

下面是一个例子:

这里对上面的文件做一些解释:

所有public的函数都是会被回调的函数,protected的则是类内部的函数。

构造函数中的cando是用来给当前插件添加权限(能力)。

checkPass函数是用来检验用户名和密码的正确性的,如果正确应该返回true,否则返回false。

getUserData函数是用来返回当前登录用户的信息,至少要包含用户名(name)以及组(grps)信息。

最后,至于用户的具体权限的话,是要通过ACL来配置。

  • 命名空间管理

DokuWiki默认是不能创建、修改以及移动命名空间的,要支持这些操作的话,需要安装三个插件,下面是各自的地址:

https://www.dokuwiki.org/plugin:addnewpage

https://www.dokuwiki.org/plugin:move

https://www.dokuwiki.org/plugin:pagemove

本文隐藏内容 登陆 后才可以浏览

未完待续。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注