Matrica uloga
Potpun pregled onoga što svaka uloga u ovom wikiju dopušta i ne dopušta, razinu po razinu. Ova je stranica jedini izvor vrijednosti ovlaštenja; sve ostale stranice upućuju ovamo umjesto da vrijednosti ponavljaju.
Opseg
| Razina | Dodjeljuje | Pohranjeno u | Vrednuje |
|---|---|---|---|
| 1 DokuWiki ACL | brojevi 0–255 po stranici ili imenskom prostoru | conf/acl.auth.php | jezgra DokuWikija |
| 2 Jamstvo sjednice | AUTHENTICATED, MAIL_OTP, TOTP, MFA_ANY | conf/wkidentity-policy.json | wkidentity |
| 3 Uloga u projektu | none, reader, contributor, maintainer, admin | grupe u upravljanju korisnicima | wkdocore |
| 4 Razine komponenata | razlikuje se po komponenti | ACL ili vlastita datoteka pravila | sama komponenta |
Razine se pitaju ovim redoslijedom i svaka smije samo odbiti. Uloga na razini 3 ne može dodijeliti ono što je razina 1 uskratila.
Razina 1: DokuWiki ACL
Osnovna ljestvica. Vrijedi za svaku stranicu i svaki imenski prostor i jedina je razina koja radi i bez ijedne komponente ove kuće.
Ljestvica
| Vrijednost | Naziv | Dopušta | Ne dopušta |
|---|---|---|---|
| 0 | Bez pristupa | ništa; stranica se ponaša kao da ne postoji | svako čitanje, uključujući privitke i kanale |
| 1 | Čitanje | vidjeti stranicu, povijest i razlike, izvoz, pretplatu | svaku izmjenu, pa i stvaranje podstranice |
| 2 | Uređivanje | dodatno: mijenjati postojeće stranice, skice, vraćanje | stvaranje novih stranica, prijenos datoteka |
| 4 | Stvaranje | dodatno: stvarati nove stranice u imenskom prostoru | prijenos datoteka, brisanje datoteka |
| 8 | Prijenos | dodatno: stavljati datoteke u medijsko područje | ponovno brisanje prenesenih datoteka |
| 16 | Brisanje | dodatno: brisati datoteke u medijskom području | konfiguracija, upravljanje korisnicima, proširenja |
| 255 | Administracija | sve, uz zaobilaženje svakog ACL pravila | — |
Kako nastaje vrijednost
DokuWiki vrednuje najodređenije pravilo, a ne najviše. Redom:
- Pravilo za ovaj račun na ovoj stranici.
- Pravilo za grupu ovog računa na ovoj stranici — ako ih je više, pobjeđuje najviše.
- Ista dva koraka u sljedećem višem imenskom prostoru, sve do korijena.
- Ništa ne odgovara: bez pristupa.
Pravilo računa nadjačava svako grupno pravilo iste razine, čak i ako je niže. Tako se pojedinačni račun isključuje iz područja koje je njegovoj grupi otvoreno.
Grupe ovog wikija
| Grupa | Tko je u njoj | Značenje |
|---|---|---|
@ALL | svaki posjetitelj, prijavljen ili ne | osnovna vrijednost; na 0 područje nije javno |
@user | svaki prijavljeni račun | „prijava je dovoljna“ |
@admin | grupa superadministracije ($conf['superuser']) | u cijelosti zaobilazi razinu 1 |
@wvds | urednički suradnici | prava pisanja na jezičnim i sadržajnim imenskim prostorima |
@wvdse | tehničko održavanje točaka montiranja | potpun pristup montiranim repozitorijima |
@dwdo_<projekt>_readers | čitatelji projekta | vidi razinu 3 |
@dwdo_<projekt>_contributors | suradnici projekta | vidi razinu 3 |
@dwdo_<projekt>_maintainers | održavatelji projekta | vidi razinu 3 |
Razina 2: jamstvo sjednice
Ova razina ne pita tko ste, nego koliko je dobro ova jedna sjednica to dokazala. Najčešći je razlog da ste prijavljeni i svejedno odbijeni.
| Stupanj | Znači | Postiže se | Nije dovoljno za |
|---|---|---|---|
AUTHENTICATED | prijavljen, lozinka je dovoljna | uobičajena prijava | područja s obvezom faktora |
MAIL_OTP | jednokratni kod e-poštom potvrđen | unos koda iz e-poruke | područja koja izrijekom traže TOTP |
TOTP | aplikacija za autentifikaciju potvrđena | šesteroznamenkasti kod iz aplikacije | — |
MFA_ANY | bilo koji drugi faktor potvrđen | MAIL_OTP ili TOTP | — |
Na što se zahtjev može vezati
Zahtjev se veže na opseg. Postoji osam vrsta:
namespace— sve stranice ispod prefiksa.plugin,module,view— komponenta, modul u njoj, pojedinačni prikaz.command,adminAction— naredba, odnosno administrativna radnja.group,user— vezani uz onoga tko traži umjesto uz cilj: „ova grupa uvijek treba TOTP”.
Ako ih se poklapa više, vrijedi najviši. Sjednica koja je dokazala MAIL_OTP zadovoljava MFA_ANY i MAIL_OTP, ali ne i TOTP.
Tri starija popisa
| Popis | Učinak | Blokira? |
|---|---|---|
required_users | stranica profila i traka na stranici opominju na postavljanje | ne, samo opomena |
email_users | smiju rabiti kod e-poštom i kada je općenito isključen | ne, samo proširuje |
required_namespaces | čitanje i pisanje odbijaju se dok faktor nije postavljen | da |
email_users može metodu samo dodati, nikada oduzeti. Datoteka pravila koja nedostaje ili je nečitljiva stoga nikoga ne može zaključati.
Razina 3: uloga u projektu
Unutar projekta vrijedi vlastita, uređena ljestvica. Ona određuje koja se radna područja pojavljuju u navigaciji i tko smije mijenjati popis članova projekta.
| Uloga | Stupanj | Dopušta | Ne dopušta |
|---|---|---|---|
none | 0 | ništa | svako projektno područje |
reader | 10 | vidjeti projektna i radna područja | mijenjati sadržaj, vidjeti članove |
contributor | 20 | dodatno: stvarati i mijenjati sadržaj projekta | upravljati članovima, mijenjati postavke |
maintainer | 30 | dodatno: upravljati članovima, postavke projekta | imenovati održavatelje, globalna konfiguracija |
admin | 40 | sve | — |
admin je globalna superadministracija wikija, a ne uloga vezana uz projekt. Administratorsko pravo ograničeno na projekt ne postoji: najviša uloga koju se u projektu može imati jest maintainer. Održavatelje imenuje globalna administracija.
Odakle uloga dolazi
Najprije grupni sloj, zatim ACL. Pobjeđuje prvo poklapanje:
- Superadministracija →
admin. - Član grupe
@dwdo_<projekt>_maintainers→maintainer. - Član grupe
@dwdo_<projekt>_contributors→contributor. - Član grupe
@dwdo_<projekt>_readers→reader. - Inače: prevesti ACL vrijednost na korijenu projekta — od 16 →
maintainer, od 2 →contributor, od 1 →reader, inačenone.
Prefiks dwdo_ može se podesiti (roleprefix). Uloga se uvijek utvrđuje na korijenu projekta, nikada na stranici koju upravo gledate — ona je svojstvo projekta, a ne poziva.
Što navigacija skriva
Radna područja koja uloga ne doseže skrivaju se u navigacijskoj traci. To je odluka o prikazu, a ne zaštita: odredišna stranica sama provjerava svoje ovlaštenje. Nestala stavka stoga znači „ovdje za vas nema ničega“, a ne „ovdje je nešto skriveno”.
Razina 4: razine komponenata
Pojedine komponente dodatno vode vlastitu ljestvicu jer njihov predmet nije wiki stranica.
Montirani repozitoriji izvornog koda
Četiri stepenice jedne ljestvice, izražene istim brojevima kao razina 1 — nema, dakle, drugog spremišta ovlaštenja, nego jedan ACL redak po grupi na točki montiranja.
| Sposobnost | ACL vrijednost | Dopušta | Ne dopušta |
|---|---|---|---|
view | 1 | pregledavati i gledati unutar wikija | klonirati, preuzeti |
fetch | 2 | dodatno: klonirati i preuzeti arhiv | pohraniti vlastite izmjene |
propose | 4 | dodatno: pohraniti pod vlastitim ref prefiksom | pisati u tuđe refove |
write | 8 | dodatno: pisati svugdje gdje repozitorij dopušta | upravljati točkama montiranja |
Za nove točke montiranja postoje četiri predloška:
| Razina | Tko vidi | Tko piše |
|---|---|---|
private | nitko osim tehničkog održavanja | tehničko održavanje |
readonly | svaki prijavljeni račun (fetch) | tehničko održavanje |
public | svi, i bez prijave (fetch) | tehničko održavanje |
team | čitatelji projekta (view) | suradnici fetch, održavatelji write |
team je jedina razina čije grupe ovise o projektu. Pravi je izbor čim više zatvorenih projekata stoji jedan uz drugi: ostale tri poznaju samo „nitko“, „svi prijavljeni” i „svi“.
SQLite Data Studio
Matrica sposobnosti umjesto ljestvice, jer je šest sposobnosti doista neovisno.
| Sposobnost | Dopušta |
|---|---|
use | uopće otvoriti Studio |
query | izvoditi upite za čitanje |
write | mijenjati podatke |
design | mijenjati shemu |
export | izvoziti rezultate |
admin | upravljati vezama i samom matricom |
Razrješenje, pobjeđuje prvo poklapanje:
- Superadministracija → uvijek dopušteno.
- Ako je
dbadmin_readonlyna 1,writeidesignsu odbijeni — i ondje gdje ih matrica dodjeljuje. - Pravilo za vezu nadjačava globalno; unutar jednog opsega pravilo računa nadjačava svako grupno pravilo. Grupna pravila istog opsega se zbrajaju.
- Nema odgovarajućeg pravila → odbijeno.
Radnje s obvezom faktora
Više komponenata za pojedine radnje dodatno traži jamstvo sjednice prema razini 2, neovisno o ovlaštenju koje račun ima.
| Komponenta | Radnja | Traži |
|---|---|---|
| Trezor | read | AUTHENTICATED |
| Trezor | create, rotate, delete, rekey | MFA_ANY |
| SQLite Data Studio | code-write, connection-admin, db-destructive | MFA_ANY |
| Resursi | create, update | AUTHENTICATED |
| Resursi | delete | MFA_ANY |
| Poveznica s Azure DevOpsom | secret-write, remove | MFA_ANY |
| Točke montiranja | token-issue | AUTHENTICATED |
| Točke montiranja | mount-admin | MFA_ANY |
| Blog | content-admin | MFA_ANY |
Tko što održava
| Razina | Zaslon | Tko onamo smije |
|---|---|---|
| 1 ACL | ?do=admin → Nadzor pristupa | superadministracija |
| 1 grupe računa | ?do=admin → Upravljanje korisnicima | superadministracija |
| 2 jamstvo sjednice | ?do=admin → Identitet | superadministracija |
| 3 članovi projekta | stranica projekta → Članovi | održavatelji projekta |
| 4 razine montiranja | ?do=admin → Točke montiranja | superadministracija |
| 4 matrica sposobnosti | ?do=admin → SQLite Data Studio → Ovlaštenja | tko u Studiju ima admin |
Zaslon članova projekta jedini je koji ne treba globalnu administraciju. Zato je on odredište na koje se usmjerava zahtjev za pristupom projektu — vidi Kamo zahtjev ide.
Ugovor za komponente
Vlastita komponenta svoje odbijanje vješa na istu infrastrukturu umjesto da piše vlastitu rečenicu. Dovoljna su dva poziva.
Odbijanje zbog nedostajućeg ovlaštenja:
$req = plugin_load('helper', 'wkrequest'); if (is_object($req) && method_exists($req, 'accessPanel')) { echo $req->accessPanel([ 'resourceLabel' => $naslov, 'required' => $req->permissionLabel(AUTH_READ), 'current' => $req->currentPermissionLabel($idStranice), 'draft' => [ 'type' => 'ACCESS_REQUEST', 'owner' => 'mojdodatak', 'handler' => 'mojdodatak:postavke', 'resource' => $idStranice, ], 'alternatives' => [['label' => $drugiPut, 'href' => $url]], ]); }
Odbijanje zbog nedostajućeg drugog faktora:
echo $req->stepUpPanel([ 'requirement' => 'MFA_ANY', 'origin' => 'mojdodatak:brisanje', 'back' => $urlPovratka, ]);
Prijava, „moji otvoreni zahtjevi” i povratni put dodaju se a da pozivno mjesto na njih ne mora misliti; svaki od njih sam se proglašava nedostupnim u položaju u koji ne pristaje i tada se izostavlja.
Da bi zahtjev stigao na pravo mjesto, komponenta prijavljuje svoj administrativni zaslon:
$controller->register_hook('WKREQUEST_REGISTER_HANDLERS', 'BEFORE', $this, 'registerRequestHandlers'); // ... $event->data['handlers'][] = [ 'owner' => 'mojdodatak', 'id' => 'postavke', 'label' => $this->getLang('menu'), 'url' => wl('', ['do' => 'admin', 'page' => 'mojdodatak'], true, '&'), 'types' => ['ACCESS_REQUEST', 'ADMIN_ACTION_REQUEST'], ];
Ako komponenta zatvoreno područje poznaje bolje od jezgre, ploču izoštrava umjesto da pokraj nje nacrta drugu:
$controller->register_hook('WKREQUEST_REFINE_DENIED', 'BEFORE', $this, 'refineDeniedRequest');
$event->data tada nosi id, resourceLabel, required, current, facts, alternatives i draft. Vraćene vrijednosti preuzimaju se pojedinačno; neupotrebljiva se odbacuje i ostaje općeniti odgovor.
Poznate praznine
Mjesta na kojima model danas pruža manje nego što ostatak ove stranice nagovješćuje. Navedena su jer praznina koju nitko ne imenuje izgleda kao čitateljeva pogreška.
| Praznina | Posljedica | Zaobilazni put |
|---|---|---|
| Poruke nakon pokušane radnje i dalje su jednoredni napuci, a ne ploče. To se odnosi među ostalim na Git prikaz, cjevovode, radne stavke i prikaz izvornog koda. | Nakon neuspjelog klika piše „to vam nije dopušteno“ bez puta do zahtjeva. | Ponovno učitati stranicu: zatvorena stranica nosi ploču. |
| Samo zahtjev koji imenuje projekt sam pronalazi svoje nadležne. Sve ostalo ide na globalno podešenu adresu — a u ovoj instalaciji nijedna nije postavljena. | Zahtjev bez veze s projektom ne obavještava nikoga. Pohranjen je i vidljiv u pretincu, ali nitko za njega ne dozna. | Upisati adresu pod notify_mail, ili redovito otvarati pretinac. |
@wvds i @wvdse pojavljuju se u ACL pravilima, ali trenutačno nisu dodijeljeni nijednom računu. | Pravila koja otvaraju samo tim grupama ne otvaraju nikome. | Provjeriti dodjelu u upravljanju korisnicima. |
| Pregled projekata koji navodi vašu ulogu po projektu zasad postoji samo na njemačkom. | Tko sučelje rabi na drugom jeziku, svoje uloge nalazi jednu po jednu, na svakoj stranici projekta. | Pregled projekata (na njemačkom) |
Povezane teme
- Uloge i ovlaštenja — ulaz i putokaz.
- How to: zatražiti pristup — put od odbijanja do zahtjeva.
- Zašto mi to nije dopušteno? — simptomi i njihovi uzroci.