Příručka:Háčky/userCan

This page is a translated version of the page Manual:Hooks/userCan and the translation is 100% complete.
userCan
Dostupné od verze 1.6.0
Využívá se k přerušení/kontrole v případě, kdy uživatel chce udělat X s obsahem článku Y.
Definice funkce:
public static function onuserCan( $title, $user, $action, &$result ) { ... }
Registrace háčku: V extension.json:
{
	"Hooks": {
		"userCan": "MediaWiki\\Extension\\MyExtension\\Hooks::onuserCan"
	}
}
Volá se z: Soubor/y: Permissions/PermissionManager.php
Rozhraní: userCanHook.php

Další informace o háčcích najdete na stránce Příručka:Háčky .
Chcete-li vědět, jaká rozšíření tento háček používají, podívejte se na stránku Category:userCan extensions/cs.

Podrobnosti

$title

reference na objekt title se kterým se pracuje v dotazu (více o tomhle objektu viz $IP/includes/Title.php)

$user

reference na objekt user, ve kterém je vše co se týče aktuálního uživatele (více o tomhle objektu viz $IP/includes/Title.php)

$action

action je řetězec (string), který identifikuje aktuální akci, která se v danou chvíli na základě dotazu aplikuje na objekt title

$result

  • reference na result se postupně předává všem funkcím, ve stejném pořadí, jak jsou navěšené na tento háček (viz $IP/includes/Hooks.php)
  • $result můžete nechat na pokoji, nebo ho nastavit na true nebo false, podle toho jaký bude výsledek vaší funkce navěšené na háček
  • 'true' znamená, že uživatel může pokračovat dál ve zpracování obsahu stránky a 'false', že uživatel $user akci předanou přes $action na objekt $title aplikovat nemůže.
  • pokud funkce nevrátí žádnou hodnotu, pak to znamená, že za dané situace zůstává její postoj neutrální.

Co způsobí návratová hodnota funkce, navěšené na tento háček

  • funkce, které jsou navěšené na tento háček zpracovávají, v tom pořadí jak jsou na něj navěšeny, dokud se nedojde na konec seznamu, nebo dokud některá z nich nevrátí true
  • kterákoliv z funkcí, navěšených na tento háček, další proces zpracování přeruší, tím že vrátí false.

Záměrný postranní efekt zřetězení funkcí na tomto háčku

  • obsah proměnné $result, která je předaná navěšeným funkcím přes referenci, se průběžně mění, podle toho, jaký je výsledek zpracování funkce
  • pokud některá z funkcí navěšených na háčku bude chtít něco vypnout, tak jiná, co za ní bude následovat, může dospět k jinému závěru a $result opět povolit
  • na druhou stranu poslední funkce ze seznamu háčků má tu nevýhodu, že na ni nemusí dojít, a tudíž má mnohem menší šanci $result ovlivnit

Konečné rozhodnutí, jak naložit s trojicí objektů $title - $user - $action tak závisí na tom, jakou bude mít aktuální hodnotu $result, poté co se dokončí zpracování celého seznamu funkcí navěšených na tomto háčku.

Rizika spojená s návratem řetězcové hodnoty

Na rozdíl od většiny ostatních háčků funkce navěšené na háček userCan žádnou řetězcovou hodnotu nevrací. U jiných háčků, které vracejí textové řetězce může být součástí návratové hodnoty text, ve kterém lze upřesnit příčinu případě chyby. Je to proto, že se během zobrazení stránky s oznámením chybového hlášení volá háček userCan, který se používá pro nastavení uživatelského rozhraní, a pokud by tenhle háček vracel textové řetězce tak by mohlo dojít k nekonečné rekurzi! Bylo to vyzkoušeno u verze 1.6.10 ale je možné, že už to bylo opraveno.

Omezení

  Varování: I když uživatel nemá přístupová práva ke čtení daného článku, může být tenhle článek i nadále zobrazován v různých seznamech (např. v seznamu posledních změn, ve výsledcích vyhledávání atd.). Viz Bezpečnostní problémy s autorizačními rozšířeními .

Tabulka možných kombinací

pokud se vrátí true pokud se vrátí false
$result = true Uživatel může pokračovat v dalším zpracování stránky.

Následující funkce může výsledek změnit.

Uživatel může pokračovat ve zpracování stránky.

Na zpracování následující funkcí už nedojde.

$result = false Uživatel nemůže pokračovat v dalším zpracování stránky.

Následující funkce může výsledek změnit.

Uživatel nemůže pokračovat v dalším zpracování stránky.

Na zpracování následující funkcí už nedojde.

$result nechává na pokoji Rozhodnutí závisí na zpracování dalších háčků, nebo jiném, interním rozhodnutí.

Následující funkce může výsledek změnit.

Rozhodnutí závisí na zpracování předchozích háčků, nebo jiném, interním rozhodnutí.

Na zpracování následující funkcí už nedojde.
Zkontrolujte, jestli obsah $result je skutečně typu boolean.

Související odkazy