Module:Effective protection level:修订间差异
IdleTap-bot(留言 | 贡献) 导入自求闻百科 |
IdleTap-bot(留言 | 贡献) 兼容未安装 TitleBlacklist 扩展:加 mw.ext.TitleBlacklist 存在性守卫(由IdleTap-bot导入维护) |
||
| 第44行: | 第44行: | ||
return 'templateeditor' | return 'templateeditor' | ||
elseif action == 'move' then | elseif action == 'move' then | ||
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move. | local blacklistentry = (mw.ext and mw.ext.TitleBlacklist) and mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move. | ||
if blacklistentry and not blacklistentry.params.autoconfirmed then | if blacklistentry and not blacklistentry.params.autoconfirmed then | ||
return 'officialprotected' | return 'officialprotected' | ||
| 第53行: | 第53行: | ||
end | end | ||
end | end | ||
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename) | local blacklistentry = (mw.ext and mw.ext.TitleBlacklist) and mw.ext.TitleBlacklist.test(action, pagename) | ||
if blacklistentry then | if blacklistentry then | ||
if not blacklistentry.params.autoconfirmed then | if not blacklistentry.params.autoconfirmed then | ||
2026年8月4日 (二) 03:36的最新版本
This module provides a way to retrieve the group required to perform a given action on a page. It currently tests the following criteria:
- 在MediaWiki命名空間:sysop
- 全站/使用者的JavaScript/CSS頁:interfaceadmin
- 全站/使用者的JSON頁:sysop
- 被保護頁面:steward、revisionprotected、sysop、templateeditor或autoconfirmed
- 被連鎖保護頁面:sysop
- 符合標題黑名單:steward或autoconfirmed
- 移動檔案:autoconfirmed
- 移動頁面或上傳檔案:autoconfirmed
- 其餘:*
Usage
[编辑源代码]Warning: This module will use up to 4 expensive parser function calls each time it is ran. It should only be used if the exact effective protection level is necessary. Otherwise, consider using title.protectionLevels instead.
From other modules
[编辑源代码]To load this module:
local effectiveProtectionLevel = require('Module:Effective protection level')._main
The function accepts two parameters. The first is a string containing the action to check, which must be one of "edit", "create", "move", "upload", or "autoreview". The second is optional, and can either be the name of the page to check, or a title returned from the mw.title functions. If the second parameter is omitted, the page being displayed is the one checked against. The return value is a string containing the name of the group required to perform the given action.
From wikitext
[编辑源代码]The parameters are the same as when it is called directly.
{{#invoke:Effective protection level|action|title}}
See also
[编辑源代码]
local p = {}
-- Returns the permission required to perform a given action on a given title.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then
error( 'First parameter must be one of edit, move, create, upload, undelete', 2 )
end
if title.namespace == 8 then -- MediaWiki namespace
if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
return 'interfaceadmin'
else -- any non-JS/CSS MediaWiki page
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- user JSON page
return 'sysop'
end
end
if action == 'undelete' then
return 'sysop'
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'steward' or level == 'officialprotected' then
return 'officialprotected'
elseif level == 'revisionprotected' or level == 'senioreditor' then
return 'revisionprotected'
elseif level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page
return 'sysop'
elseif level == 'templateeditor' then
return 'templateeditor'
elseif action == 'move' then
local blacklistentry = (mw.ext and mw.ext.TitleBlacklist) and mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'officialprotected'
elseif title.namespace == 6 then
return 'autoconfirmed'
else
return 'autoconfirmed'
end
end
local blacklistentry = (mw.ext and mw.ext.TitleBlacklist) and mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'officialprotected'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'autoconfirmed'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p