Manual:用户权限
用户权限是可分配给不同用户组的权限(例如編輯頁面和封禁用戶的能力)。 MediaWiki提供默认的用户权限和用户组,但您可以对其进行修改。 此页面将讲解默认的权限和用户组,以及怎样修改。
有關如何在群組中加入和移除一個Wiki用戶的資訊,請參見Help:用户权限和用户组和Manual:在MediaWiki设置用户组。
更改用户组权限
MediaWiki安装程序会为默认用户组分配一些权限(见#权限列表)。
你可以通过使用下列语法编辑$wgGroupPermissions中的LocalSettings.php中的数组来更改默认的权限:
$wgGroupPermissions['group']['right'] = true /* 或者为false */;
如果一个成员有多个组,其将获得其所属的每个组的所有权限。
包括匿名用户在内的所有用户都在*用户组中,所有注册用户都在user用户组中。
除了默认用户组之外,您还可以用同样的方式创建新用户组。
示例
这个示例将禁止所有用户访问除$wgWhitelistRead外的页面,但是仅对于注册用户开放。
$wgGroupPermissions['*']['read'] = false;
# 下面一行不是必须的,因为它已被设置与默认值中。对于'*'设置的禁止权限不会影响到设置为启用权限的用户组。
$wgGroupPermissions['user']['read'] = true;
下面的例子将禁止所有用户编辑页面,然后仅允许已确认电子邮件地址的用户编辑:
# 禁止所有用户编辑。
$wgGroupPermissions['*']['edit'] = false;
# 禁止注册用户编辑(默认情况下'user'用户组将被允许编辑,即便'*'被设置为禁止)。
$wgGroupPermissions['user']['edit'] = false;
# 将已确认电子邮箱的用户加入用户组中。
$wgAutopromote['emailconfirmed'] = APCOND_EMAILCONFIRMED;
# 在用户列表中隐藏该组。
$wgImplicitGroups[] = 'emailconfirmed';
# 最后,赋予该用户组编辑权限。
$wgGroupPermissions['emailconfirmed']['edit'] = true;
创建用户组并分配权限
您可以创建用户组。只需在$wgGroupPermissions[ 'group-name' ]中分配权限即可隐式创建用户组,其中group-name是组的实际名称。
自MW 1.12起,您可以通过$wgAutopromote创建您自己的组,用户将自动授权到该组(通过autoconfirmed)。
除了分配权限,您应该创建这三个wiki页面与适合的内容:
- MediaWiki:Group-<group-name> (内容为:
用户组的名称) - MediaWiki:Group-<group-name>-member (内容为:
用户组成员的名称) - MediaWiki:Grouppage-<group-name> (内容为:
用户组页面的名称)
在默认情况下,行政员可以将用户从任意用户组中添加或移除。
然而,如果您使用$wgAddGroups和$wgRemoveGroups,您或许也应该修改它们。
示例
下面的例子将会随意地添加一个projectmember用户组,且该用户组能够封禁用户、删除页面以及默认情况下隐藏更改日志。
$wgGroupPermissions['projectmember']['bot'] = true;
$wgGroupPermissions['projectmember']['block'] = true;
$wgGroupPermissions['projectmember']['delete'] = true;
'random-group'或'random_group'代替'random group'。 此外,建議建立的群組名稱僅使用小寫字母。在本例中,您或许应该创建这些页面:
- MediaWiki:Group-projectmember (内容为:
Project members) - MediaWiki:Group-projectmember-member (内容为:
Project member) - MediaWiki:Grouppage-projectmember (内容为:
Project:Project Members)
这确保了该组在界面中将被称为“Project members”,该组成员被称为“Project member”,该组的概述的页面为Project:Project members。
下面的示例默认情况下禁止写入(页面编辑和创建),创建一个名为writer的组,并授予其写访问权限。
用户可以通过Special:UserRights手动添加到此组:
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createpage'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['user']['createpage'] = false;
$wgGroupPermissions['writer']['edit'] = true;
$wgGroupPermissions['writer']['createpage'] = true;
在本例中,您或许也应该创建这些页面:
- MediaWiki:Group-writer (内容为:
Writers) - MediaWiki:Group-writer-member (内容为:
Writer) - MediaWiki:Grouppage-writer (内容为:
Project:Write)
权限列表
下列的用户权限在MediaWiki的最新版可用。 如果您使用的是旧版本,请查看您的wiki上的Special:Version并查看您使用的版本是否包含在“版本”列中。
| 权限 | 描述 | 默认拥有此权限的用户组 | 版本 |
|---|---|---|---|
| 閱讀 | |||
| read | 阅读页面 – 当设置为false时,可通过$wgWhitelistRead访问特定页面
将用户权限
'read'设置为false仅仅限制了对wiki页面(例如作品和讨论页面)的访问。 在默认情况下,$wgUploadPath子目录下已上传的文件(包括图像、文件、文档)将始终保持可通过直接链接公开访问。为了限制对已上传文件的访问限制,请参考Manual:Image authorization与img_auth.php中的说明。 |
*, user | 1.5+ |
| 编辑 | |||
| applychangetags | 将标签与自己的更改一起应用 – 需要edit权限
|
user | 1.25+ |
| autocreateaccount | 通过外部用户账号自动登录 - 受较大限制的createaccount版本
|
— | 1.27+ |
| createaccount | 新建用户账号 – register / registration | *, sysop | 1.5+ |
| createpage | 创建(非讨论页)页面 – 需要edit权限
|
*, user | 1.6+ |
| createpreviouslyrenamedaccount | 使用曾被其他账号使用过的用户名创建账号 – requires the createaccount right
|
sysop | 1.47+ |
| createtalk | 创建讨论页面 – 需要edit权限
|
*, user | 1.6+ |
| createwithcontentmodel | 创建具有非默认内容模型的页面 – requires the createpage right
|
user | 1.46+ |
| delete-redirect | 删除单个版本的重定向 (注意,如果该组已经拥有delete权限,则不需要这个权限)
|
— | 1.36+ |
| edit | 编辑页面 – 需要read权限
|
*, user | 1.5+ |
| editsemiprotected | 编辑受保护的页面(semi protected) – 无级联保护 – 需要edit权限
|
autoconfirmed, bot, sysop | 1.22+ |
| editprotected | 编辑受保护的页面(fully protected) – 无级联保护 – 需要edit权限
|
sysop | 1.13+ |
| minoredit | 标记编辑为小编辑 – 需要edit权限
|
user | 1.6+ |
| move | 移动页面 – 需要edit权限
|
user, sysop | 1.5+ |
| move-categorypages | 移动分类页面 – 需要move权限
|
user, sysop | 1.25+ |
| move-rootuserpages | 移动用户母页面 – 需要move权限
|
user, sysop | 1.14+ |
| move-subpages | 移动页面及其子页面 – 需要move权限
|
user, sysop | 1.13+ |
| movefile | 移动文件 – 同樣也需要move权限
|
user, sysop | 1.14+ |
| reupload | 覆盖现存文件 – 需要upload权限
|
user, sysop | 1.6+ |
| reupload-own | 覆盖自己上传的文件 – 需要upload权限(注意如果用户组已拥有reupload权限的话,就不需要这个)
|
— | 1.11+ |
| reupload-shared | 本地覆盖共享文件库的文件 – (若一个已经存在)用本地文件覆盖 (需要upload权限)
|
user, sysop | 1.6+ |
| sendemail | 发送电子邮件给其他用户 | user | 1.16+ |
| upload | 上传文件 – 需要edit权限及$wgEnableUploads設定為true
|
user, sysop | 1.5+ |
| upload_by_url | 从URL上传文件 – 需要upload权限 (在1.20之前,它被賦予給管理員)
|
— | 1.8+ |
| 管理 | |||
| autopatrol | 修改权限持有者执行的某些操作,自动将其标记为 “已巡查” – 取决于$wgUseRCPatrol、$wgUseNPPatrol、$wgUseFilePatrol
|
bot, sysop | 1.9+ |
| bigdelete | 删除有大型历史的页面 (由$wgDeleteRevisionsLimit定義) – 需要delete权限
|
sysop | 1.12+ |
| block | 阻止或取消阻止其他用户编辑 – 封禁选项包括禁止编辑和注册新账号,以及自动封禁同一IP地址上的其他用户。 | sysop | 1.5+ |
| blockemail | 阻止或取消阻止用户发送电子邮件 – 允许在封禁时阻止使用Special:Emailuser界面 – 需要block权限
|
sysop | 1.11+ |
| browsearchive | 搜索已被删除的页面 – 通过Special:Undelete – 需要deletedhistory权限
|
sysop | 1.13+ |
| changetags | 在个别修订和日志记录中添加并移除任意标签 – 目前未被扩展使用 | user | 1.25+ |
| delete | 删除页面 1.5-1.11允许删除或取消删除页面 1.12+允许删除页面 (对于取消删除,目前拥有 undelete权限,参见下方)
|
sysop | 1.5+ |
| deletedhistory | 查看被删除的历史项目,不含相关文本 | sysop | 1.6+ |
| deletedtext | 查看已被删除的文本及已删除版本间的差异 – requires the deletedhistory right
|
sysop | 1.16+ |
| deletelogentry | 删除和恢复特定的日志项目 – 允许删除/反删除特定日志条目的信息(操作文本,摘要,进行操作的用户),需要deleterevision权限
|
suppress | 1.20+ |
| deleterevision | 删除和恢复页面的特定版本 – 允许删除/反删除特定修订的信息(修订文本,编辑摘要,编辑用户) (在1.20版本中拆分为deleterevision和deletelogentry)
|
suppress | 1.6+ |
| editcontentmodel | 编辑页面的内容模型 – 需要edit权限
|
user | 1.23.7+ |
| editinterface | 编辑用户界面 – 包含界面信息。 现在要编辑全站的CSS/JSON/JS,需要隔离权限,详细见下文。 – 需要edit权限
|
sysop, interface-admin | 1.5+ |
| editmyoptions | 编辑自己的参数设置 | * | 1.22+ |
| editmyprivateinfo | 编辑自己的私人数据(如电子邮件地址、真实姓名)和申请重置密码邮件 – “更改密码”也被隐藏了,但没有隐藏其他更改密码的方式 – 需要viewmyprivateinfo权限
|
* | 1.22+ |
| editmyusercss | 编辑用户本人的CSS文件 – 在1.31之前,它被賦予給所有人(即*)(注意如果用戶組已經有editusercss權限則不需要) – 需要edit权限
|
user | 1.22+ |
| editmyuserjs | 编辑用户本人的JavaScript文件 – 在1.31之前,它被賦予給所有人(即*)(注意如果用戶組已經有edituserjs權限則不需要) – 需要edit权限
|
user | 1.22+ |
| editmyuserjsredirect | 编辑自己的JavaScript重定向文件 (注意,如果该组已经拥有edituserjs权限,则不需要这个权限) – 需要edit权限
|
— | 1.34+ |
| editmyuserjson | 编辑用户本人的JSON文件 (注意如果用戶組已經有edituserjson權限則不需要) – 需要edit权限
|
user | 1.31+ |
| editmywatchlist | 编辑自己的监视列表(请留意即使缺少此权限,某些操作仍将添加页面至监视列表) – 需要viewmywatchlist权限
|
user | 1.22+ |
| editsitecss | 编辑全站CSS – 需要editinterface权限
|
interface-admin | 1.32+ |
| editsitejs | 编辑全站JavaScript – 需要editinterface权限
|
interface-admin | 1.32+ |
| editsitejson | 编辑全站JSON – 需要editinterface权限
|
sysop, interface-admin | 1.32+ |
| editusercss | 编辑其他用户的CSS文件 – 需要edit权限
|
interface-admin | 1.16+ |
| edituserjs | 编辑其他用户的JavaScript文件 – 需要edit权限
|
interface-admin | 1.16+ |
| edituserjson | 编辑其他用户的JSON文件 – 需要edit权限
|
sysop, interface-admin | 1.31+ |
| hideuser | 封禁或解封、隐藏或取消隐藏用户名 – 默认仅能对于不多于1000次编辑的用户可用 – 需要block权限
使用 |
suppress | 1.10+ |
| ignore-restricted-groups | 绕过编辑某些受限用户组的条件 – 仅适用于用户根据userrights权限和$wgAddGroups的内容原本就可以更改的组。
|
— | 1.46+ |
| markbotedits | 标记回退编辑为机器人编辑 – 参见手册:回退 – 需要rollback权限
|
sysop | 1.12+ |
| mergehistory | 合并页面历史 – 需要edit权限
|
sysop | 1.12+ |
| pagelang | 更改页面语言 – $wgPageLanguageUseDB必须为true
|
— | 1.24+ |
| patrol | 将这种动作标记为“已巡查” – 取决于$wgUseRCPatrol、$wgUseNPPatrol、$wgUseFilePatrol
|
sysop | 1.5+ |
| patrolmarks | 查看最近更改的巡查标记 (注意,若用户组已有patrol权限,则此不必要)
|
— | 1.16+ |
| protect | 更改保护设定和编辑受连锁保护的页面 – 需要edit权限
|
sysop | 1.5+ |
| rollback | 快速回退最后一位用户对某一页面的编辑 – 需要edit权限
|
sysop | 1.5+ |
| suppressionlog | 查看非公开日志 | suppress | 1.6+ |
| suppressrevision | 查看、隐藏与取消隐藏来自任何用户对页面做出的特定版本修订 – 在版本1.13之前,此权限名为hiderevision – 需要deleterevision权限
|
suppress | 1.6+ |
| unblockself | 自我解封 – 若没有此权限,管理员在被其他管理员封禁时管理员不能自我解封 | sysop | 1.17+ |
| undelete | 还原页面 – 需要deletedhistory权限
|
sysop | 1.12+ |
| userrights | 编辑所有用户权限 – 允许指派或移除所有(*)的用户组給任何用户。 (*)透過 |
bureaucrat | 1.5+ |
| userrights-interwiki | 编辑其他wiki上用户的用户权限 – 需要userrights权限
|
— | 1.12+ |
| viewmyprivateinfo | 查看自己的私人数据(如电子邮件地址、真实姓名) | * | 1.22+ |
| viewmywatchlist | 查看自己的监视列表 | user | 1.22+ |
| viewsuppressed | 查看被隐藏的任何用户的修订 – 亦即,是一个比suppressrevision更小的权限(注意如果用戶組已經有suppressrevision權限,則不需要)
|
suppress | 1.24+ |
| 管理 | |||
| deletechangetags | 从数据库删除标签 – 目前未被扩展使用 | sysop | 1.28+ |
| import | 从其他wiki导入页面 – "transwiki" – 需要edit权限
|
sysop | 1.5+ |
| importupload | 通过上传文件导入页面 – 这个权限在1.5版本及之前被称为importraw – 需要edit权限
|
sysop | 1.5+ |
| managechangetags | 创建、激活和取消激活标签 – 目前未被扩展使用 | sysop | 1.25+ |
| renameuser | 重命名用户 (以前是Renameuser扩展的一部分) | bureaucrat | 1.40+ |
| siteadmin | 锁定和解锁数据库 – 阻止与网站的所有交互(除了访问)。 (默认情况下不可用) | — | 1.5+ |
| unwatchedpages | 查看未受监视的页面列表 – 列出没有用户监视的页面 | sysop | 1.6+ |
| 技术 | |||
| apihighlimits | 在API查询中使用更高的上限 | bot, sysop | 1.12+ |
| autoconfirmed | 不受基于IP的速率限制 – 使用autoconfirmed组,有关详细信息,请参阅下表 (注意,若用户组已有noratelimit权限,则此不必要)
|
autoconfirmed, bot, sysop | 1.6+ |
| bot | 被视为自动化过程 – 编辑及被记录的操作会从最近更改中隐去。 | bot | 1.5+ |
| ipblock-exempt | 绕过IP封禁、自动封禁和段封禁 | sysop | 1.9+ |
| nominornewtalk | 不使小编辑在讨论页面引发新消息提示 – 需要minoredit权限
|
bot | 1.9+ |
| noratelimit | 不受速率限制影响 – 不受速率限制影响(在引入此权限之前,配置$wgRateLimitsExcludedGroups用于实现此目的)
|
sysop, bureaucrat | 1.13+ |
| override-export-depth | 导出页面,包括最多5层链接 使用此權限,可以在Special:Export處定義鏈接頁面的深度。否則,將使用 $wgExportMaxLinkDepth的值(默認情況下為0)。
|
— | 1.15+ |
| suppressredirect | 移动页面时不在原页面创建重定向 – 需要move权限
|
bot, sysop | 1.12+ |
预定义的用户组
以下用户组在最新版本的MediaWiki中可用。 如果您使用的是旧版本,那么其中一些可能无法实现。
| 用户组 | 描述 | 默认权限 | 版本 |
|---|---|---|---|
| * | 所有用户(包括匿名用户)。 | createaccount, createpage, createtalk, edit, editmyoptions, editmyprivateinfo, read, viewmyprivateinfo | 1.5+ |
| temp | 臨時用户帳戶 (T330816) | 與*组類似
|
1.41+ |
| user | 已注册帐户。 「請勿」包括臨時帐户。 | applychangetags, changetags, createpage, createtalk, createwithcontentmodel, edit, editcontentmodel, editmyusercss, editmyuserjs, editmyuserjson, editmywatchlist, minoredit, move, move-categorypages, move-rootuserpages, move-subpages, movefile, purge, read, reupload, reupload-shared, sendemail, upload, viewmywatchlist | 1.13+ |
| autoconfirmed | 满足$wgAutoConfirmAge中设置的注册时间及$wgAutoConfirmCount中设置的编辑数量的已注册帐户。
|
autoconfirmed, editsemiprotected | 1.6+ |
| bot | 拥有「机器人」权限(打算使用自动化脚本)的帐户。 | autoconfirmed, autopatrol, apihighlimits, bot, editsemiprotected, nominornewtalk, suppressredirect | 1.5+ |
| sysop | 那些在默认情况下可以删除和恢复页面、可對其他用户封禁和解除封禁等等的用户。 | apihighlimits, autoconfirmed, autopatrol, bigdelete, block, blockemail, browsearchive, createaccount, createpreviouslyrenamedaccount, delete, deletedhistory, deletedtext, editinterface, editprotected, editsemiprotected, editsitejson, edituserjson, import, importupload, ipblock-exempt, managechangetags, markbotedits, mergehistory, move, move-categorypages, move-rootuserpages, move-subpages, movefile, noratelimit, patrol, protect, reupload, reupload-shared, rollback, suppressredirect, unblockself, undelete, unwatchedpages, upload | 1.5+ |
| interface-admin | 那些可以编辑全站CSS和JavaScript的用户。 | editinterface, editsitecss, editsitejs, editsitejson, editusercss, edituserjs, edituserjson | 1.32+ |
| bureaucrat | 那些在默认情况下可以更改其他用户的权限、因此也可以完全存取整個wiki的用户。 | noratelimit, renameuser, userrights | 1.5+ |
| suppress | deletelogentry, deleterevision, hideuser, suppressionlog, suppressrevision, viewsuppressed | 1.13+ |
移除预設用户组
MediaWiki安装完成后即用了一些预设的用户组。 大多数情况下这些组可以通过取消设置相应的数组来删除,其中包括$wgGroupPermissions[ 'group-name' ]。 详细内容见下。
示例
这个例子将会彻底取消bureaucrat这一用户组。
需要确保所有这6个变量未设置于任何希望从Special:ListGroupRights列举项中移除的用户组;然而仅仅取消设置$wgGroupPermissions将足以从Special:UserRights移除。
unset( $wgGroupPermissions['bureaucrat'] );
unset( $wgRevokePermissions['bureaucrat'] );
unset( $wgAddGroups['bureaucrat'] );
unset( $wgRemoveGroups['bureaucrat'] );
unset( $wgGroupsAddToSelf['bureaucrat'] );
unset( $wgGroupsRemoveFromSelf['bureaucrat'] );
如果安裝了任何可修改bureaucrat用户组預設權限的扩展,例如扩展:AntiSpoof,則此程式碼將無法運作。
更廣泛地說,若要停用由扩展所建立的用户组,上述程式碼需要在所有扩展註冊完畢之後才執行。
以前是可以在LocalSettings.php中註冊一個扩展函式來達到:
$wgExtensionFunctions[] = function() use ( &$wgGroupPermissions ) {
unset( $wgGroupPermissions['oversight'] );
unset( $wgGroupPermissions['flow-bot'] );
};
然而,由於T275334的關係,這個功能已經無法可靠地運作。
user用户组的注意事项
透過上述的机制,你可以移除sysop、bureaucrat、bot、interface-admin、suppress用户组,這些组,如果有使用的話,通常是通过用户权限系统來指派的。
然而,目前无法移除user用户组。
此组不是通过通常的权限系统分配的。
相反,每个已註冊的用户都会自动成为该组的成员。
默认权限
默认权限已在MainConfigSchema.php中定义。
- 当前alpha版本(HEAD,1.47版本)中的默认值
- 最新稳定版本(REL1_45分支,1.45版本)中的默认值
- 附加权利:您应该可以通过运行
PermissionManager::getAllRights()来列出您wiki上可用的所有权限。
添加新权限
仅供编码員参考的信息,如下。
如果您在核心中添加新权限,例如控制新的特殊页面,则「必须」将其添加到PermissionManager.php中的可用权限列表中CORE_RIGHTS(範例)。
如果你Template:$man,则需要改換成使用$AvailableRights。
您可能还想通过编辑上述$wgGroupPermissions将其指派给某个用户组。
如果你希望該權限能夠被外部應用程式透過OAuth或機器人密碼存取,則你需要編輯$wgGrantPermissions來加到授權中。
// 建立projectmember-powers權限
$wgAvailableRights[] = 'projectmember-powers';
// 將projectmember-powers加入到projectmember群組
$wgGroupPermissions['projectmember']['projectmember-powers'] = true;
// 將projectmember-powers加入到「basic」授權,以讓我們可以透過API請求使用我們的projectmember權限
$wgGrantPermissions['basic']['projectmember-powers'] = true;
您还需要将right-[name]和action-[name]接口消息添加到/languages/i18n/en.json(包含qqq.json中的文档)。
right-*消息可以在Special:ListGroupRights上看到,而action-*消息则用在您没有权限……这样的句子中。
参见
- Special:ListGroupRights – 指向此帮助页面的链接,并可能包含尚未记录的权限
- Help:用户权限和用户组 – 帮助页面描述使用Special:Userrights界面(行政员)
- Manual:在MediaWiki设置用户组 – 有关管理和分配用户组的信息。
- 手册:$wgNamespaceProtection
- 手册:$wgAutopromote
- Manual:$wgAddGroups、Manual:$wgRemoveGroups
- Manual:阻止访问 – 例子
- Manual:创建行政员的层次结构
- 分类:用户权限扩展 – 许多关于用户权限的扩展