Ti trovi qui: start » it » Documentazione interna » Estensioni DokuWiki (WvdS) » Ruoli e permessi » Matrice dei ruoli

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
I valori 4, 8 e 16 valgono soltanto per le regole di namespace. Su una singola pagina 2 è il valore più alto con un significato; numeri superiori su una regola di pagina si comportano come 2.

Come si ottiene un valore

DokuWiki valuta la regola più specifica, non la più alta. Nell'ordine:

  1. Regola per questo account su questa pagina.
  2. Regola per un gruppo di questo account su questa pagina — se più di una si applica, prevale la più alta.
  3. Gli stessi due passi nel namespace superiore, fino alla radice.
  4. 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

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:

  1. Superamministrazione → admin.
  2. Membro di @dwdo_<progetto>_maintainersmaintainer.
  3. Membro di @dwdo_<progetto>_contributorscontributor.
  4. Membro di @dwdo_<progetto>_readersreader.
  5. Altrimenti: tradurre il valore ACL sulla radice del progetto — da 16 → maintainer, da 2 → contributor, da 1 → reader, altrimenti none.

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.

Il passo 5 è la ragione per cui un progetto funziona anche senza alcun gruppo di sovrapposizione: gira allora puramente sull'ACL del namespace. È anche la ragione per cui un valore ACL di 16 su una radice di progetto rende qualcuno manutentore senza che alcun gruppo lo dica in modo visibile.

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:

  1. Superamministrazione → sempre consentito.
  2. Se dbadmin_readonly è a 1, write e design sono negati — anche dove la matrice li concede.
  3. 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.
  4. 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=adminControllo accessi superamministrazione
1 gruppi di un account ?do=adminGestione utenti superamministrazione
2 garanzia di sessione ?do=adminIdentità superamministrazione
3 membri del progetto pagina del progetto → Membri i manutentori del progetto
4 livelli di montaggio ?do=adminPunti di montaggio superamministrazione
4 matrice delle facoltà ?do=adminSQLite Data StudioPermessi 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

it/wiki/dwe/permissions/matrix.txt · Ultima modifica: da 0.0.0.0