API:Benutzergruppen
Appearance
Diese Seite ist Teil der Dokumentation der MediaWiki action API. |
MediaWiki Version: | ≥ 1.16 |
Es sind POST-Anfragen nötig, um Benutzergruppen zu ändern
API-Dokumentation
Beispiel
Um diese API zu benutzen, melde dich zunächst an, um deine eigenen Benutzerrechte zu verifizieren. Nur einige Benutzergruppen haben das Recht, Benutzergruppen über die API zu ändern. Siehe API:Login für das Loginprozedere
Sobald du eingeloggt bist, mach ein GET-Request, um einen userrights token zu erhalten.
Die obige Anfrage gilt für MediaWiki v. 1.24+; in älteren Versionen hängt der userrights
-Token vom Benutzer ab, dessen Benutzergruppen geändert werden sollen.
Die Anfrage würde so gemacht werden:
api.php? action=query& list=users& meta=tokens& ususers=Bob& type=userrights [In der ApiSandbox ausprobieren]
Aus Kompatiblitätsgründen akzeptiert die API auch die Tokens, die Im Webinterface benutzt werden.
Welche Methode auch immer gewählt wurde, sobald du den Token hast, kannst du dein userrights
-Request machen, wie unten.
POST-Anfrage
Entferne Bob aus bureaucrat und füge ihn zu sysop hinzu, wodurch ihm Sysop-Rechte vergeben werden.
api.php? action=userrights& user=Bob& add=sysop& remove=bureaucrat& reason=Oops,%20put%20Bob%20in%20the%20wrong%20group& token=sampleUserrightsToken+/ [In der ApiSandbox ausprobieren]
Antwort
{
"userrights": {
"user": "Bob",
"userid": 2793024,
"removed": ["bureaucrat"],
"added": ["sysop"]
}
}
Beispielcode
Python
#!/usr/bin/python3
"""
userrights.py
MediaWiki API Demos
Demo of `Userrights` module: Add and remove user rights by
changing the user's group membership.
MIT license
"""
import requests
S = requests.Session()
URL = "https://test.wikipedia.org/w/api.php"
# Step 1: Retrieve a login token
PARAMS_1 = {
"action": "query",
"meta": "tokens",
"type": "login",
"format": "json"
}
R = S.get(url=URL, params=PARAMS_1)
DATA = R.json()
LOGIN_TOKEN = DATA["query"]["tokens"]["logintoken"]
# Step 2: Send a post request to log in. See
# https://www.mediawiki.org/wiki/Manual:Bot_passwords
# for a special note on logging in using a simplified
# interface when accessing wikis via an application,
# rather than the GUI
PARAMS_2 = {
"action": "login",
"lgname": "username",
"lgpassword": "password",
"lgtoken": LOGIN_TOKEN,
"format": "json"
}
R = S.post(URL, data=PARAMS_2)
# Step 3: Obtain a Userrights token
PARAMS_3 = {
"action": "query",
"format": "json",
"meta": "tokens",
"type": "userrights"
}
R = S.get(url=URL, params=PARAMS_3)
DATA = R.json()
USERRIGHTS_TOKEN = DATA["query"]["tokens"]["userrightstoken"]
# Step 4: Request to add or remove a user from a group
PARAMS_4 = {
"action": "userrights",
"format": "json",
"user": "Bob",
"add": "sysop",
"remove": "bureaucrat",
"reason": "OOPS! added Bob to the wrong group",
"token": USERRIGHTS_TOKEN
}
R = S.post(URL, data=PARAMS_4)
DATA = R.json()
print(DATA)
PHP
<?php
- /*
- userrights.js
-
- Die obige Anfrage gilt für MediaWiki v. 1.24+; in älteren Versionen hängt der $1-Token vom Benutzer ab, dessen Benutzergruppen geändert werden sollen.
- Die Anfrage würde so gemacht werden:
- Welche Methode auch immer gewählt wurde, sobald du den Token hast, kannst du dein $1-Request machen, wie unten.
-
- Es sind POST-Anfragen nötig, um Benutzergruppen zu ändern
- */
$endPoint = "http://dev.wiki.local.wmftest.net:8080/w/api.php";
$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2
$userrights_Token = getUserRightsToken(); // Step 3
change_userrights( $userrights_Token ); // Step 4
// Step 1: GET request to fetch login token
function getLoginToken() {
global $endPoint;
$params1 = [
"action" => "query",
"meta" => "tokens",
"type" => "login",
"format" => "json"
];
$url = $endPoint . "?" . http_build_query( $params1 );
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );
$output = curl_exec( $ch );
curl_close( $ch );
$result = json_decode( $output, true );
return $result["query"]["tokens"]["logintoken"];
}
// Step 2: POST request to log in. Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest( $logintoken ) {
global $endPoint;
$params2 = [
"action" => "clientlogin",
"username" => "username",
"password" => "password",
'loginreturnurl' => 'http://127.0.0.1:5000/',
"logintoken" => $logintoken,
"format" => "json"
];
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $endPoint );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params2 ) );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );
$output = curl_exec( $ch );
curl_close( $ch );
}
// Step 3: GET request to fetch userrights token
function getUserRightsToken() {
global $endPoint;
$params3 = [
"action" => "query",
"meta" => "tokens",
"type" => "userrights",
"format" => "json"
];
$url = $endPoint . "?" . http_build_query( $params3 );
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );
$output = curl_exec( $ch );
curl_close( $ch );
$result = json_decode( $output, true );
return $result["query"]["tokens"]["userrightstoken"];
}
// Step 4: POST request to add or remove a user from a group
function change_userrights( $userrightstoken ) {
global $endPoint;
$params4 = [
"action" => "userrights",
"user" => "ABCDEF",
"add" => "bot",
"expiry" => "infinite",
"reason" => "API Testing",
"token" => $userrightstoken,
"format" => "json"
];
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $endPoint );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params4 ) );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );
$output = curl_exec( $ch );
curl_close( $ch );
echo ( $output );
}
JavaScript
- /*
- userrights.js
-
- Die obige Anfrage gilt für MediaWiki v. 1.24+; in älteren Versionen hängt der $1-Token vom Benutzer ab, dessen Benutzergruppen geändert werden sollen.
- Die Anfrage würde so gemacht werden:
- Welche Methode auch immer gewählt wurde, sobald du den Token hast, kannst du dein $1-Request machen, wie unten.
-
- Es sind POST-Anfragen nötig, um Benutzergruppen zu ändern
- */
var request = require('request').defaults({jar: true}),
url = "http://dev.wiki.local.wmftest.net:8080/w/api.php";
// Step 1: GET request to fetch login token
function getLoginToken() {
var params_0 = {
action: "query",
meta: "tokens",
type: "login",
format: "json"
};
request.get({ url: url, qs: params_0 }, function (error, res, body) {
if (error) {
return;
}
var data = JSON.parse(body);
loginRequest(data.query.tokens.logintoken);
});
}
// Step 2: POST request to log in.
// Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest(login_token) {
var params_1 = {
action: "clientlogin",
username: "username",
password: "password",
loginreturnurl: "http://127.0.0.1:5000/",
logintoken: login_token,
format: "json"
};
request.post({ url: url, form: params_1 }, function (error, res, body) {
if (error) {
return;
}
getUserRightsToken();
});
}
// Step 3: GET request to fetch UserRights token
function getUserRightsToken() {
var params_2 = {
action: "query",
meta: "tokens",
type: "userrights",
format: "json"
};
request.get({ url: url, qs: params_2 }, function(error, res, body) {
if (error) {
return;
}
var data = JSON.parse(body);
userrights(data.query.tokens.userrightstoken);
});
}
// Step 4: POST request to add or remove a user from a group
function userrights(userrights_token) {
var params_3 = {
action: "userrights",
user: "ABCDEFG",
add: "bot",
expiry: "infinite",
reason: "API Testing",
token: userrights_token,
format: "json"
};
request.post({ url: url, form: params_3 }, function (error, res, body) {
if (error) {
return;
}
console.log(body);
});
}
// Start From Step 1
getLoginToken();
MediaWiki JS
- /*
- userrights.js
-
- Die obige Anfrage gilt für MediaWiki v. 1.24+; in älteren Versionen hängt der $1-Token vom Benutzer ab, dessen Benutzergruppen geändert werden sollen.
- Die Anfrage würde so gemacht werden:
- Welche Methode auch immer gewählt wurde, sobald du den Token hast, kannst du dein $1-Request machen, wie unten.
-
- Es sind POST-Anfragen nötig, um Benutzergruppen zu ändern
- */
var params = {
action: 'userrights',
user: 'ABCD',
add: 'sysop',
reason: 'Added ABCD to the sysop group',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'userrights', params ).done( function ( data ) {
console.log( data );
} );
Mögliche Fehler
Code | Info |
---|---|
nouser | The user parameter must be set. |
nosuchuser | Benutzer "user" existiert nicht Dies passiert möglicherweise beim Versuch, die Rechte eines anonymen Benutzers zu ändern.
|
notoken | The token parameter must be set. |
badtoken | Invalid CSRF token. |
readonly | Das Wiki ist derzeit im schreibgeschützten Modus. |
Parametergeschichte
- v1.29:
expiry
eingeführt - v1.23:
userid
eingeführt
Zusätzliche Anmerkungen
- Standardmäßig können nur Bürokraten Rechte erteilen oder entziehen
- Einige Wikis erlauben Benutzern, die keine Bürokraten sind, Benutzerrechte unter Bedingungen zu ändern, wie die des eigenen Kontos
- Wenn du nicht die Berechtigung dazu hast, das entsprechende Recht zu erteilen oder zu entziehen, wird die API keinen Fehler werfen, sondern die Felder
add
undremove
in der Antwort werden schlicht und einfach Leer sein.
Siehe auch
- Help:Benutzerrechte und Benutzergruppen - beschreibt, wie Benutzerrechte und Benutzergruppen im Detail funktionieren.
- Special:ListGroupRights - listet alle Benutzergruppen und deren Berechtigungen im aktuellen Wiki auf.
- Special:UserRights - eine GUI-Variante, Berechtigungen zu erteilen oder zu entziehen (MediaWiki v. 1.29+)
- API:Benutzer - Informationen über einen Benutzer bekommen, inklusive seiner Benutzergruppen und Rechte