Matrika vlog
Popoln pregled tega, kaj vsaka vloga tega wikija dovoljuje in česa ne, raven za ravnjo. Ta stran je edini vir vrednosti dovoljenj; vse druge strani se sklicujejo sem, namesto da bi vrednosti ponavljale.
Obseg
| Raven | Dodeljuje | Shranjeno v | Ovrednoti |
|---|---|---|---|
| 1 DokuWiki ACL | števila 0–255 na stran ali imenski prostor | conf/acl.auth.php | jedro DokuWikija |
| 2 Zanesljivost seje | AUTHENTICATED, MAIL_OTP, TOTP, MFA_ANY | conf/wkidentity-policy.json | wkidentity |
| 3 Projektna vloga | none, reader, contributor, maintainer, admin | skupine v upravljanju uporabnikov | wkdocore |
| 4 Ravni komponent | se razlikuje po komponenti | ACL ali lastna datoteka pravilnika | komponenta sama |
Ravni se vprašajo v tem vrstnem redu in vsaka sme le zavrniti. Vloga na ravni 3 ne more podeliti tistega, kar je raven 1 odrekla.
Raven 1: DokuWiki ACL
Osnovna lestvica. Velja za vsako stran in vsak imenski prostor in je edina raven, ki deluje tudi brez katere koli komponente te hiše.
Lestvica
| Vrednost | Ime | Dovoljuje | Ne dovoljuje |
|---|---|---|---|
| 0 | Ni dostopa | nič; stran se vede, kot da je ne bi bilo | vsakršno branje, vključno s priponkami in viri |
| 1 | Branje | videti stran, zgodovino in razlike, izvoz, naročnino | vsako spremembo, tudi ustvarjanje podstrani |
| 2 | Urejanje | dodatno: spreminjati obstoječe strani, osnutke, vračanje | ustvarjanje novih strani, nalaganje datotek |
| 4 | Ustvarjanje | dodatno: ustvarjati nove strani v imenskem prostoru | nalaganje datotek, brisanje datotek |
| 8 | Nalaganje | dodatno: postavljati datoteke v predstavnostno področje | ponovno brisanje naloženih datotek |
| 16 | Brisanje | dodatno: brisati datoteke v predstavnostnem področju | konfiguracija, upravljanje uporabnikov, razširitve |
| 255 | Skrbništvo | vse, mimo vsakega pravila ACL | — |
Kako nastane vrednost
DokuWiki ovrednoti najbolj določeno pravilo, ne najvišjega. Po vrsti:
- Pravilo za ta račun na tej strani.
- Pravilo za skupino tega računa na tej strani — če jih je več, zmaga najvišje.
- Ista koraka v naslednjem višjem imenskem prostoru, vse do korena.
- Nič se ne ujema: ni dostopa.
Pravilo računa premaga vsako skupinsko pravilo iste ravni, tudi če je nižje. Tako se posamezen račun izključi iz področja, ki je njegovi skupini odprto.
Skupine tega wikija
| Skupina | Kdo je v njej | Pomen |
|---|---|---|
@ALL | vsak obiskovalec, prijavljen ali ne | osnovna vrednost; pri 0 področje ni javno |
@user | vsak prijavljen račun | »prijava zadošča« |
@admin | skupina vrhovnega skrbništva ($conf['superuser']) | v celoti obide raven 1 |
@wvds | uredniški sodelavci | pravice pisanja na jezikovnih in vsebinskih imenskih prostorih |
@wvdse | tehnično vzdrževanje priklopnih točk | poln dostop do priklopljenih repozitorijev |
@dwdo_<projekt>_readers | bralci projekta | glejte raven 3 |
@dwdo_<projekt>_contributors | sodelavci projekta | glejte raven 3 |
@dwdo_<projekt>_maintainers | vzdrževalci projekta | glejte raven 3 |
Raven 2: zanesljivost seje
Ta raven ne sprašuje, kdo ste, ampak kako dobro je to ena sama seja dokazala. Je najpogostejši razlog, da ste prijavljeni in vseeno zavrnjeni.
| Stopnja | Pomeni | Doseže se z | Ne zadošča za |
|---|---|---|---|
AUTHENTICATED | prijavljen, geslo zadošča | običajna prijava | področja z obveznim dejavnikom |
MAIL_OTP | enkratna koda po e-pošti potrjena | vnos kode iz e-sporočila | področja, ki izrecno zahtevajo TOTP |
TOTP | aplikacija za overjanje potrjena | šestmestna koda iz aplikacije | — |
MFA_ANY | kateri koli drugi dejavnik potrjen | MAIL_OTP ali TOTP | — |
Na kaj se zahteva lahko veže
Zahteva se veže na obseg. Obstaja osem vrst:
namespace— vse strani pod predpono.plugin,module,view— komponenta, modul v njej, posamezen pogled.command,adminAction— ukaz oziroma skrbniško dejanje.group,user— vezano na prosilca namesto na cilj: »ta skupina vedno potrebuje TOTP«.
Če se jih ujema več, velja najvišja. Seja, ki je dokazala MAIL_OTP, izpolnjuje MFA_ANY in MAIL_OTP, ne pa TOTP.
Trije starejši seznami
| Seznam | Učinek | Blokira? |
|---|---|---|
required_users | stran profila in trak na strani opominjata na nastavitev | ne, samo opomin |
email_users | smejo uporabljati kodo po e-pošti tudi, kadar je splošno izklopljena | ne, samo razširi |
required_namespaces | branje in pisanje sta odrečena, dokler dejavnik ni nastavljen | da |
email_users lahko metodo samo doda, nikoli odvzame. Manjkajoča ali neberljiva datoteka pravilnika zato nikogar ne more zakleniti.
Raven 3: projektna vloga
Znotraj projekta velja lastna, urejena lestvica. Določa, katera delovna področja se pojavijo v krmarjenju in kdo sme spreminjati seznam članov projekta.
| Vloga | Stopnja | Dovoljuje | Ne dovoljuje |
|---|---|---|---|
none | 0 | nič | vsako projektno področje |
reader | 10 | videti projektna in delovna področja | spreminjati vsebino, videti člane |
contributor | 20 | dodatno: ustvarjati in spreminjati vsebino projekta | upravljati člane, spreminjati nastavitve |
maintainer | 30 | dodatno: upravljati člane, nastavitve projekta | imenovati vzdrževalce, globalna konfiguracija |
admin | 40 | vse | — |
admin je globalno vrhovno skrbništvo wikija, ne vloga, vezana na projekt. Skrbniške pravice, omejene na projekt, ne obstajajo: najvišja vloga, ki jo je mogoče imeti v projektu, je maintainer. Vzdrževalce imenuje globalno skrbništvo.
Od kod prihaja vloga
Najprej skupinski sloj, nato ACL. Zmaga prvo ujemanje:
- Vrhovno skrbništvo →
admin. - Član skupine
@dwdo_<projekt>_maintainers→maintainer. - Član skupine
@dwdo_<projekt>_contributors→contributor. - Član skupine
@dwdo_<projekt>_readers→reader. - Sicer: prevesti vrednost ACL na korenu projekta — od 16 →
maintainer, od 2 →contributor, od 1 →reader, sicernone.
Predpono dwdo_ je mogoče nastaviti (roleprefix). Vloga se vedno določi na korenu projekta, nikoli na strani, ki jo prav gledate — je lastnost projekta, ne zahteve.
Kaj krmarjenje skrije
Delovna področja, ki jih vloga ne doseže, se v krmarni vrstici skrijejo. To je odločitev o prikazu, ne zaščita: ciljna stran svoje dovoljenje preveri sama. Izginula postavka torej pomeni »tu za vas ni ničesar«, ne »tu je nekaj skritega«.
Raven 4: ravni komponent
Posamezne komponente dodatno vodijo lastno lestvico, ker njihov predmet ni wiki stran.
Priklopljeni repozitoriji izvorne kode
Štirje klini ene lestvice, izraženi v istih številih kot raven 1 — druge hrambe dovoljenj torej ni, ampak ena vrstica ACL na skupino na priklopni točki.
| Zmožnost | Vrednost ACL | Dovoljuje | Ne dovoljuje |
|---|---|---|---|
view | 1 | brskati in gledati znotraj wikija | klonirati, prenesti |
fetch | 2 | dodatno: klonirati in prenesti arhiv | odložiti lastne spremembe |
propose | 4 | dodatno: odložiti pod lastno predpono ref | pisati v tuje reference |
write | 8 | dodatno: pisati povsod, kjer repozitorij to dopušča | upravljati priklopne točke |
Za nove priklopne točke obstajajo štiri prednastavitve:
| Raven | Kdo vidi | Kdo piše |
|---|---|---|
private | nihče razen tehničnega vzdrževanja | tehnično vzdrževanje |
readonly | vsak prijavljen račun (fetch) | tehnično vzdrževanje |
public | vsi, tudi brez prijave (fetch) | tehnično vzdrževanje |
team | bralci projekta (view) | sodelavci fetch, vzdrževalci write |
team je edina raven, katere skupine so odvisne od projekta. Je prava izbira, takoj ko več zaprtih projektov stoji drug ob drugem: druge tri poznajo le »nihče«, »vsi prijavljeni« in »vsi«.
SQLite Data Studio
Matrika zmožnosti namesto lestvice, ker je šest zmožnosti resnično neodvisnih.
| Zmožnost | Dovoljuje |
|---|---|
use | sploh odpreti Studio |
query | izvajati bralne poizvedbe |
write | spreminjati podatke |
design | spreminjati shemo |
export | izvažati rezultate |
admin | upravljati povezave in matriko samo |
Razrešitev, zmaga prvo ujemanje:
- Vrhovno skrbništvo → vedno dovoljeno.
- Če je
dbadmin_readonlyna 1, stawriteindesignodrečena — tudi tam, kjer ju matrika podeli. - Pravilo za povezavo premaga globalno; znotraj enega obsega pravilo računa premaga vsako skupinsko pravilo. Skupinska pravila istega obsega se združijo.
- Ni ustreznega pravila → odrečeno.
Dejanja z obveznim dejavnikom
Več komponent za posamezna dejanja dodatno zahteva zanesljivost seje po ravni 2, ne glede na dovoljenje, ki ga račun ima.
| Komponenta | Dejanje | Zahteva |
|---|---|---|
| Trezor | read | AUTHENTICATED |
| Trezor | create, rotate, delete, rekey | MFA_ANY |
| SQLite Data Studio | code-write, connection-admin, db-destructive | MFA_ANY |
| Viri | create, update | AUTHENTICATED |
| Viri | delete | MFA_ANY |
| Povezava z Azure DevOps | secret-write, remove | MFA_ANY |
| Priklopne točke | token-issue | AUTHENTICATED |
| Priklopne točke | mount-admin | MFA_ANY |
| Blog | content-admin | MFA_ANY |
Kdo kaj vzdržuje
| Raven | Zaslon | Kdo sme tja |
|---|---|---|
| 1 ACL | ?do=admin → Nadzor dostopa | vrhovno skrbništvo |
| 1 skupine računa | ?do=admin → Upravljanje uporabnikov | vrhovno skrbništvo |
| 2 zanesljivost seje | ?do=admin → Identiteta | vrhovno skrbništvo |
| 3 člani projekta | stran projekta → Člani | vzdrževalci projekta |
| 4 ravni priklopa | ?do=admin → Priklopne točke | vrhovno skrbništvo |
| 4 matrika zmožnosti | ?do=admin → SQLite Data Studio → Dovoljenja | kdor ima v Studiu admin |
Zaslon članov projekta je edini, ki ne potrebuje globalnega skrbništva. Zato je cilj, na katerega se usmeri prošnja za dostop do projekta — glejte Kam gre prošnja.
Pogodba za komponente
Lastna komponenta svojo zavrnitev obesi na isto infrastrukturo, namesto da bi napisala lastno poved. Zadostujeta dva klica.
Zavrnitev zaradi manjkajočega dovoljenja:
$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($idStrani), 'draft' => [ 'type' => 'ACCESS_REQUEST', 'owner' => 'mojvticnik', 'handler' => 'mojvticnik:nastavitve', 'resource' => $idStrani, ], 'alternatives' => [['label' => $drugaPot, 'href' => $url]], ]); }
Zavrnitev zaradi manjkajočega drugega dejavnika:
echo $req->stepUpPanel([ 'requirement' => 'MFA_ANY', 'origin' => 'mojvticnik:brisanje', 'back' => $urlNazaj, ]);
Prijava, »moje odprte prošnje« in pot nazaj se dodajo, ne da bi klicno mesto nanje moralo misliti; vsaka od njih se v položaju, v katerega ne sodi, sama razglasi za nedosegljivo in se takrat izpusti.
Da prošnja pride na pravo mesto, komponenta prijavi svoj skrbniški zaslon:
$controller->register_hook('WKREQUEST_REGISTER_HANDLERS', 'BEFORE', $this, 'registerRequestHandlers'); // ... $event->data['handlers'][] = [ 'owner' => 'mojvticnik', 'id' => 'nastavitve', 'label' => $this->getLang('menu'), 'url' => wl('', ['do' => 'admin', 'page' => 'mojvticnik'], true, '&'), 'types' => ['ACCESS_REQUEST', 'ADMIN_ACTION_REQUEST'], ];
Če komponenta zaprto področje pozna bolje od jedra, ploščo izostri, namesto da bi ob njej narisala drugo:
$controller->register_hook('WKREQUEST_REFINE_DENIED', 'BEFORE', $this, 'refineDeniedRequest');
$event->data takrat nosi id, resourceLabel, required, current, facts, alternatives in draft. Vrnjene vrednosti se prevzamejo posamično; neuporabna se zavrže in ostane splošni odgovor.
Znane vrzeli
Mesta, na katerih model danes ponuja manj, kot preostanek te strani nakazuje. Navedena so, ker vrzel, ki je nihče ne poimenuje, izgleda kot bralčeva napaka.
| Vrzel | Posledica | Obhod |
|---|---|---|
| Sporočila po poskušenem dejanju so še vedno enovrstična obvestila, ne plošče. To zadeva med drugim pogled Git, cevovode, delovne postavke in prikaz izvorne kode. | Po neuspelem kliku piše »tega ne smete« brez poti do prošnje. | Znova naložiti stran: zaprta stran nosi ploščo. |
| Le prošnja, ki imenuje projekt, sama najde svoje pristojne. Vse drugo gre na globalno nastavljen naslov — v tej namestitvi pa ni nastavljen noben. | Prošnja brez navezave na projekt ne obvesti nikogar. Shranjena je in vidna v predalu, a nihče zanjo ne izve. | Vpisati naslov pod notify_mail, ali redno odpirati predal. |
@wvds in @wvdse se pojavljata v pravilih ACL, a trenutno nista dodeljena nobenemu računu. | Pravila, ki odpirajo le tema skupinama, ne odpirajo nikomur. | Preveriti dodelitev v upravljanju uporabnikov. |
| Pregled projektov, ki navaja vašo vlogo po projektih, zaenkrat obstaja samo v nemščini. | Kdor vmesnik uporablja v drugem jeziku, svoje vloge najde eno po eno, na vsaki strani projekta. | Pregled projektov (v nemščini) |
Sorodne teme
- Vloge in dovoljenja — vhod in kažipot.
- How to: zaprositi za dostop — pot od zavrnitve do prošnje.
- Zakaj mi to ni dovoljeno? — simptomi in njihovi vzroki.