API:Restricting API usage/zh
有幾種方法可以限制某些特定的使用者群組使用(某些部分的)API,或完全停用它。 其中的某些需要變更群組的权限。
禁用一般的存取
沒有專門用於存取API的使用者權限。
若要停用特定使用者群組的API存取權限,您可以停用該群組的 read 權限。
例如,要禁止匿名的請求,
$wgGroupPermissions['*']['read'] = false;
請注意,有一些API模組可能是無論如何都是可使用的。
如果成功阻止存取,API輸出通常會顯示錯誤代碼 readapidenied。
禁用模块
您可以在LocalSettings.php中添加一行來对所有用户禁用各個別的模块。
究竟要添加什么要取决于禁用的模块类型:
- 对于
action=模块,应添加$wgAPIModules['modulename'] = 'ApiDisabled';。 - 对于
prop=模块,应添加$wgAPIPropModules['modulename'] = 'ApiQueryDisabled';。 - 对于
list=模块,应添加$wgAPIListModules['modulename'] = 'ApiQueryDisabled';。 - 对于
meta=模块,应添加$wgAPIMetaModules['modulename'] = 'ApiQueryDisabled';。
使用action=edit來禁止任何一個用户:
$wgAPIModules['edit'] = 'ApiDisabled';
要限制API操作的访问权限,为ApiCheckCanExecute添加下面的钩子:
static function onApiCheckCanExecute( $module, $user, &$message ) {
$moduleName = $module->getModuleName();
$permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
if (
$moduleName == 'action' &&
!$permissionManager->userHasRight( $user, 'right' )
) {
$message = 'apierror-action-notallowed';
return false;
}
return true;
}
将'action', 'right'和'apierror-action-notallowed'替换为适当的值。