Matrice dei ruoli
Il quadro completo di ciò che ogni ruolo di questo wiki consente e non consente, livello per livello. Questa pagina è l'unica fonte dei valori di permesso; tutte le altre pagine rimandano qui invece di ripeterli.
Ambito
| Livello | Assegna | Memorizzato in | Valutato da |
|---|---|---|---|
| 1 ACL di DokuWiki | numeri 0–255 per pagina o namespace | conf/acl.auth.php | nucleo di DokuWiki |
| 2 Garanzia di sessione | AUTHENTICATED, MAIL_OTP, TOTP, MFA_ANY | conf/wkidentity-policy.json | wkidentity |
| 3 Ruolo di progetto | none, reader, contributor, maintainer, admin | gruppi nella gestione utenti | wkdocore |
| 4 Livelli dei componenti | varia per componente | ACL oppure un file di criteri proprio | il componente stesso |
I livelli vengono interrogati in quest'ordine e ciascuno può soltanto respingere. Un ruolo del livello 3 non può concedere ciò che il livello 1 ha negato.
Livello 1: l'ACL di DokuWiki
La scala di base. Vale per ogni pagina e ogni namespace ed è l'unico livello che funziona anche senza alcun componente di questa casa.
La scala
| Valore | Nome | Consente | Non consente |
|---|---|---|---|
| 0 | Nessun accesso | nulla; la pagina si comporta come se non esistesse | qualsiasi lettura, allegati e feed compresi |
| 1 | Lettura | vedere la pagina, cronologia e differenze, esportare, iscriversi | qualsiasi modifica, anche creare una sottopagina |
| 2 | Modifica | in più: modificare pagine esistenti, bozze, ripristinare | creare pagine nuove, caricare file |
| 4 | Creazione | in più: creare nuove pagine nel namespace | caricare file, eliminare file |
| 8 | Caricamento | in più: collocare file nell'area multimediale | eliminare di nuovo i file caricati |
| 16 | Eliminazione | in più: eliminare file nell'area multimediale | configurazione, gestione utenti, estensioni |
| 255 | Amministrazione | tutto, aggirando ogni regola ACL | — |
Come si ottiene un valore
DokuWiki valuta la regola più specifica, non la più alta. Nell'ordine:
- Regola per questo account su questa pagina.
- Regola per un gruppo di questo account su questa pagina — se più di una si applica, prevale la più alta.
- Gli stessi due passi nel namespace superiore, fino alla radice.
- Nessuna corrispondenza: nessun accesso.
Una regola d'account batte ogni regola di gruppo dello stesso livello, anche se più bassa. È così che si esclude un singolo account da un'area che il suo gruppo ha aperta.
I gruppi di questo wiki
| Gruppo | Chi vi appartiene | Significato |
|---|---|---|
@ALL | ogni visitatore, autenticato o no | il valore di base; a 0 l'area non è pubblica |
@user | ogni account autenticato | «essere autenticati basta» |
@admin | il gruppo di superamministrazione ($conf['superuser']) | aggira interamente il livello 1 |
@wvds | collaboratori redazionali | permessi di scrittura sui namespace di lingua e contenuto |
@wvdse | manutenzione tecnica dei punti di montaggio | accesso completo ai repository montati |
@dwdo_<progetto>_readers | lettori di un progetto | vedi livello 3 |
@dwdo_<progetto>_contributors | collaboratori di un progetto | vedi livello 3 |
@dwdo_<progetto>_maintainers | manutentori di un progetto | vedi livello 3 |
Livello 2: la garanzia di sessione
Questo livello non chiede chi siete, ma quanto bene questa singola sessione lo abbia dimostrato. È la ragione più frequente per cui si è autenticati e si viene comunque respinti.
| Grado | Significa | Si ottiene con | Non basta per |
|---|---|---|---|
AUTHENTICATED | autenticato, la password basta | accesso ordinario | aree con obbligo di fattore |
MAIL_OTP | codice monouso via e-mail confermato | inserimento del codice ricevuto | aree che richiedono esplicitamente TOTP |
TOTP | applicazione di autenticazione confermata | codice a sei cifre dall'applicazione | — |
MFA_ANY | un secondo fattore qualsiasi confermato | MAIL_OTP oppure TOTP | — |
A che cosa può essere legato un requisito
Un requisito viene legato a un ambito. Ne esistono otto tipi:
namespace— tutte le pagine sotto un prefisso.plugin,module,view— un componente, un modulo al suo interno, una singola vista.command,adminAction— un comando, oppure un'azione amministrativa.group,user— legati a chi chiede anziché all'obiettivo: «questo gruppo richiede sempre TOTP».
Se più d'uno si applica, prevale il più alto. Una sessione che ha dimostrato MAIL_OTP soddisfa MFA_ANY e MAIL_OTP, ma non TOTP.
I tre elenchi più antichi
| Elenco | Effetto | Blocca? |
|---|---|---|
required_users | la pagina del profilo e un banner sollecitano la configurazione | no, solo un sollecito |
email_users | possono usare il codice via e-mail anche se in generale è disattivato | no, amplia soltanto |
required_namespaces | lettura e scrittura sono negate finché non è configurato un fattore | sì |
email_users può soltanto aggiungere un metodo, mai toglierne uno. Un file di criteri mancante o illeggibile non può quindi mai escludere nessuno.
Livello 3: il ruolo di progetto
All'interno di un progetto vale una scala propria. Determina quali aree di lavoro compaiono nella navigazione e chi può modificare l'elenco dei membri di un progetto.
| Ruolo | Grado | Consente | Non consente |
|---|---|---|---|
none | 0 | nulla | qualsiasi area di progetto |
reader | 10 | vedere aree di progetto e aree di lavoro | modificare contenuti, vedere i membri |
contributor | 20 | in più: creare e modificare i contenuti del progetto | gestire i membri, modificare le impostazioni |
maintainer | 30 | in più: gestire i membri, impostazioni del progetto | nominare manutentori, configurazione globale |
admin | 40 | tutto | — |
admin è la superamministrazione globale del wiki, non un ruolo di progetto. Un diritto di amministrazione circoscritto al progetto non esiste: il ruolo più alto ottenibile dentro un progetto è maintainer. I manutentori li nomina l'amministrazione globale.
Da dove proviene il ruolo
Prima la sovrapposizione dei gruppi, poi l'ACL. Vince la prima corrispondenza:
- Superamministrazione →
admin. - Membro di
@dwdo_<progetto>_maintainers→maintainer. - Membro di
@dwdo_<progetto>_contributors→contributor. - Membro di
@dwdo_<progetto>_readers→reader. - Altrimenti: tradurre il valore ACL sulla radice del progetto — da 16 →
maintainer, da 2 →contributor, da 1 →reader, altrimentinone.
Il prefisso dwdo_ è configurabile (roleprefix). Il ruolo si determina sempre sulla radice del progetto, mai sulla pagina che si sta guardando: è una proprietà del progetto, non della richiesta.
Che cosa nasconde la navigazione
Le aree di lavoro che il ruolo non raggiunge vengono nascoste nella barra di navigazione. È una decisione di presentazione, non una protezione: la pagina di destinazione verifica da sé il proprio permesso. Una voce sparita significa quindi «qui per voi non c'è nulla», non «qui è nascosto qualcosa».
Livello 4: i livelli dei componenti
Alcuni componenti gestiscono in più una scala propria, perché il loro oggetto non è una pagina wiki.
Repository di codice montati
Quattro gradini di una sola scala, espressi negli stessi numeri del livello 1 — non esiste quindi una seconda amministrazione dei permessi, ma una riga ACL per gruppo sul punto di montaggio.
| Facoltà | Valore ACL | Consente | Non consente |
|---|---|---|---|
view | 1 | sfogliare e vedere dentro il wiki | clonare, scaricare |
fetch | 2 | in più: clonare e scaricare un archivio | depositare modifiche proprie |
propose | 4 | in più: depositare sotto un prefisso di ref proprio | scrivere su ref altrui |
write | 8 | in più: scrivere ovunque il repository lo consenta | amministrare i punti di montaggio |
Per i nuovi punti di montaggio esistono quattro preimpostazioni:
| Livello | Chi lo vede | Chi scrive |
|---|---|---|
private | nessuno oltre alla manutenzione tecnica | manutenzione tecnica |
readonly | ogni account autenticato (fetch) | manutenzione tecnica |
public | tutti, anche senza accesso (fetch) | manutenzione tecnica |
team | i lettori del progetto (view) | collaboratori fetch, manutentori write |
team è l'unico livello i cui gruppi dipendono dal progetto. È la scelta giusta non appena più progetti chiusi coesistono: gli altri tre conoscono soltanto «nessuno», «tutti gli autenticati» e «tutti».
SQLite Data Studio
Una matrice di facoltà invece di una scala, perché le sei facoltà sono davvero indipendenti.
| Facoltà | Consente |
|---|---|
use | aprire lo Studio |
query | eseguire interrogazioni in lettura |
write | modificare dati |
design | modificare lo schema |
export | esportare risultati |
admin | gestire le connessioni e la matrice stessa |
La risoluzione, vince la prima corrispondenza:
- Superamministrazione → sempre consentito.
- Se
dbadmin_readonlyè a 1,writeedesignsono negati — anche dove la matrice li concede. - Una regola sulla connessione batte quella globale; entro un ambito una regola d'account batte ogni regola di gruppo. Le regole di gruppo dello stesso ambito si sommano.
- Nessuna regola corrispondente → negato.
Azioni con obbligo di fattore
Diversi componenti richiedono in più, per singole azioni, una garanzia di sessione secondo il livello 2, indipendentemente dal permesso posseduto dall'account.
| Componente | Azione | Richiede |
|---|---|---|
| Cassaforte | read | AUTHENTICATED |
| Cassaforte | create, rotate, delete, rekey | MFA_ANY |
| SQLite Data Studio | code-write, connection-admin, db-destructive | MFA_ANY |
| Risorse | create, update | AUTHENTICATED |
| Risorse | delete | MFA_ANY |
| Collegamento ad Azure DevOps | secret-write, remove | MFA_ANY |
| Punti di montaggio | token-issue | AUTHENTICATED |
| Punti di montaggio | mount-admin | MFA_ANY |
| Blog | content-admin | MFA_ANY |
Chi amministra che cosa
| Livello | Schermata | Chi vi accede |
|---|---|---|
| 1 ACL | ?do=admin → Controllo accessi | superamministrazione |
| 1 gruppi di un account | ?do=admin → Gestione utenti | superamministrazione |
| 2 garanzia di sessione | ?do=admin → Identità | superamministrazione |
| 3 membri del progetto | pagina del progetto → Membri | i manutentori del progetto |
| 4 livelli di montaggio | ?do=admin → Punti di montaggio | superamministrazione |
| 4 matrice delle facoltà | ?do=admin → SQLite Data Studio → Permessi | chi possiede admin nello Studio |
La schermata dei membri di un progetto è l'unica che non richiede un'amministrazione globale. È perciò la destinazione a cui viene indirizzata una richiesta di accesso relativa a un progetto — vedi Dove finisce una richiesta.
Il contratto per i componenti
Un componente proprio aggancia il proprio rifiuto alla stessa infrastruttura invece di scrivere una frase propria. Bastano due chiamate.
Un rifiuto per permesso mancante:
$req = plugin_load('helper', 'wkrequest'); if (is_object($req) && method_exists($req, 'accessPanel')) { echo $req->accessPanel([ 'resourceLabel' => $titolo, 'required' => $req->permissionLabel(AUTH_READ), 'current' => $req->currentPermissionLabel($idPagina), 'draft' => [ 'type' => 'ACCESS_REQUEST', 'owner' => 'mioplugin', 'handler' => 'mioplugin:impostazioni', 'resource' => $idPagina, ], 'alternatives' => [['label' => $altraVia, 'href' => $url]], ]); }
Un rifiuto per secondo fattore mancante:
echo $req->stepUpPanel([ 'requirement' => 'MFA_ANY', 'origin' => 'mioplugin:elimina', 'back' => $urlRitorno, ]);
Accesso, «le mie richieste aperte» e la via di ritorno vengono aggiunti senza che il punto chiamante debba pensarci; ciascuno di essi si dichiara non disponibile nella situazione in cui non si adatta e viene allora omesso.
Affinché una richiesta arrivi al posto giusto, il componente registra la propria schermata amministrativa:
$controller->register_hook('WKREQUEST_REGISTER_HANDLERS', 'BEFORE', $this, 'registerRequestHandlers'); // ... $event->data['handlers'][] = [ 'owner' => 'mioplugin', 'id' => 'impostazioni', 'label' => $this->getLang('menu'), 'url' => wl('', ['do' => 'admin', 'page' => 'mioplugin'], true, '&'), 'types' => ['ACCESS_REQUEST', 'ADMIN_ACTION_REQUEST'], ];
Se un componente conosce l'area chiusa meglio del nucleo, affina il pannello invece di disegnarne un secondo accanto:
$controller->register_hook('WKREQUEST_REFINE_DENIED', 'BEFORE', $this, 'refineDeniedRequest');
$event->data porta allora id, resourceLabel, required, current, facts, alternatives e draft. I valori restituiti vengono ripresi uno per uno; un valore inutilizzabile viene scartato e la risposta generica resta.
Lacune note
Punti in cui il modello oggi offre meno di quanto il resto di questa pagina lasci intendere. Sono elencati perché una lacuna che nessuno nomina sembra un errore di chi legge.
| Lacuna | Conseguenza | Rimedio |
|---|---|---|
| I messaggi dopo un'azione tentata restano avvisi di una riga, non pannelli. Riguarda fra l'altro la vista Git, le pipeline, gli elementi di lavoro e la vista del codice sorgente. | Dopo un clic fallito compare «non vi è consentito» senza via per una richiesta. | Ricaricare la pagina: la pagina chiusa porta il pannello. |
| Solo una richiesta che nomina un progetto trova da sé i propri competenti. Tutto il resto va all'indirizzo configurato globalmente — e in questa installazione non ne è impostato alcuno. | Una richiesta senza riferimento a un progetto non avvisa nessuno. È memorizzata e visibile nella casella, ma nessuno ne viene a conoscenza. | Impostare un indirizzo in notify_mail, oppure aprire regolarmente la casella. |
@wvds e @wvdse compaiono nelle regole ACL ma attualmente non sono assegnati ad alcun account. | Le regole che aprono solo a questi gruppi non aprono a nessuno. | Verificare l'assegnazione nella gestione utenti. |
| Il quadro dei progetti che elenca il vostro ruolo per progetto finora esiste solo in tedesco. | Chi usa l'interfaccia in un'altra lingua trova i propri ruoli uno alla volta, su ciascuna pagina di progetto. | Quadro dei progetti (in tedesco) |
Argomenti correlati
- Ruoli e permessi — ingresso e indicazioni.
- How to: richiedere l'accesso — il percorso dal rifiuto alla richiesta.
- Perché non mi è consentito? — sintomi e cause.