- 如果你以类似这样ADMINGroup命名, 不符合正在表达式规范系统可就不会认了, 命名需要仔细.
- wiki的页面是以文件夹形式存储的, 虽然有的操作系统对于目录是不区分大小写的如windows, 但wiki确实区分大小写的, 普通页面无所谓但管理页面, 像权限组这样的页面就需要注意了, adminGroup与AdminGroup是不同的, 你需要遵循第一创建时使用的大小写样子, 否则你在使用组来设定acl时会因为没有生效而挠头.
- 组是平铺的, 不支持嵌套, 所以你也不要在组里写其他组的名字.
配置文件中的设置 wikiconfig.py 是wiki的配置文件. 启用acl功能需要在配置文件中设置acl_enabled = 1, 配置文件中关于acl同样还有其他几个属性需要注意
- acl_rights_before, 权限设置处, 优先级最高, 查询所有页面的acl均从这里开始. 例如, acl_rights_before = "simonw:admin,read,write,delete,revert UserGroup:read,write,delete,revert"
- acl_rights_default, 权限设置处, 页面如果没有acl属性设置时则默认使用这里设置的权限, 如果页面有自己的acl设置则忽略这里的设置. 在具体页面的acl属性中使用Default关键字可以继承这里的默认配置.
- superuser, 用户设置处, 它与页面acl没有什么关系, 是指能够控制用户账户的超级用户组, 此组的用户能以任何一个注册wiki的用户身份登陆, 主要用于禁用某个wiki注册账户. 不要认为此组用户便具备了页面的admin权限.例如, superuser = [u"simonw", u"simonw马甲", ]
页面权限检查流程
- 首先, acl_rights_before
- 然后, 页面的acl属性, 如果没有则应用acl_rights_default
- 最后, acl_rights_after
关于acl属性的检查流程是自左至右, 第一匹配算法, 当匹配到相应权限时便停止. 因此你需要按照这样的逻辑形式来配置以免达不到预期效果. 单个用户名->特殊组->普通组->Known ->All.用户关键词前可以加修饰符, 加号或减号(+,-) 仅当特定的用户请求的权限匹配acl中的设定时, 处理才停止, 如果正在查找另外的权限则忽略.
高级应用AutoAdmin 通常需要控制某一个页面的权限, 必须由具备admin权限的用户来修改这个页面的acl属性, 但很多情况需要让用户自己能控制某个页面及其子页面的acl访问权限.
例如用户自己的主页, 某个项目或团队的主页. 这些页面不仅当前页面需要交由用户控制而且这些页面的子页面也应当交与用户控制权限, 由管理员来亲自配置这些页面的权限是不现实的, 而大量赋予用户admin权限会使得整个站点的不可控制性变大.
因此需要使用一种自动机制能让用户在一个或几个页面及其子页面范围内拥有admin权限 , AutoAdmin是一种自动为页面及其子页面分配权限的机制.
在帮助页面HelpOnAutoAdmin中有这样的解决办法, 例子
个人主页模板#acl @ ME@/ReadWriteGroup:read,write @ [url=]ME@/ReadGroup:read[/url]
使用@ME@来创建模板, 用户使用这样的模板来创建页面就会获得相应的权限, 不过这有个前提, 这个用户必须有这个页面的admin权限. 而普通用户如这样创建会被告知没有权限, 因此单纯的@ME@方式失去了作用. 选择依然只有AutoAdmin. 方式很简单.
- 在配置文件中加入这样一行,以开启AutoAdmin模式. from MoinMoin.util.autoadmin import SecurityPolicy
- 有一个特殊的页面叫AutoAdminGroup, 这便是权限组的页面. 在这里把需要赋予权限的用户或组加入便能获得指定页面及其子页面的admin权限.
应用示例, 编辑AutoAdminGroup页面
AutoAdminGroup * simonw
* UserGroup
* Team/AdminGroup
第一条, 使simonw这个用户具备他自己页面及其子页面的admin权限.
第二条, 使UserGroup中所有的用户具备他自己页面及其子页面的admin权限.
第三条, 使加入到Team/AdminGroup这个权限组中的用户具备Team页面及其子页面的admin权限. 而在Team/AdminGroup中你不仅可以加入用户还能加入其他权限组. 例如编辑Team/AdminGroup这个页面
Team/AdminGroup * simonw
* UserGroup
这样simonw和UserGroup的所有用户具备Team页面及其子页面的admin权限.