Gruppi e autorizzazioni
Oltre ad etichettare i ruoli, il sistema di gruppo di Flarum è un modo per applicare le autorizzazioni a segmenti di utenti.
Gruppi
Flarum ha diversi "gruppi riservati":
- Il gruppo di amministratori dispone di ID
1
. Gli utenti di questo gruppo dispongono di tutte le autorizzazioni. - Tutti gli utenti (indipendentemente dallo stato di autenticazione) vengono automaticamente inseriti nel gruppo Guest (ID
2
) - Tutti gli utenti che hanno effettuato l'accesso vengono automaticamente inseriti nel gruppo Membri (ID
3
)
I gruppi riservati funzionano effettivamente come qualsiasi altro gruppo, esistente come record nel database. Hanno solo proprietà speciali per quanto riguarda il modo in cui sono assegnati (per ospiti e membri) o cosa possono fare (per amministratore).
Durante l'installazione, Flarum creerà anche un gruppo moderatori con ID 4
, ma questo è solo per comodità: non ha un significato speciale.
Gli amministratori possono anche creare nuovi gruppi tramite la dashboard dell'amministratore. Gli utenti possono essere aggiunti o rimossi dai gruppi dalla loro pagina utente.
Permessi
I "permessi" Flarum sono implementati come semplici stringhe e associati a gruppi in una tabella di pseudo-giunzione (non è una vera relazione, ma il concetto è lo stesso). Questo è in realtà tutto ciò che sta facendo la griglia delle autorizzazioni nella dashboard di amministrazione: stai aggiungendo e rimuovendo queste stringhe di autorizzazione dai gruppi.
Non esiste alcuna associazione diretta tra utenti e permessi: quando controlliamo i permessi di un utente, stiamo effettivamente enumerando i permessi per tutti i gruppi dell'utente.
I gruppi e gli utenti dispongono di metodi pubblici per controllare le loro autorizzazioni. Alcuni di quelli più comunemente usati sono:
// Una relazione eloquente con le autorizzazioni del gruppo
$group->permissions();
// Controlla se un gruppo dispone di un'autorizzazione
$group->hasPermission('viewForum');
// Enumera tutte le autorizzazioni dell'utente
$user->getPermissions();
// Controlla se l'utente fa parte di un gruppo con l'autorizzazione fornita
$user->hasPermission('viewForum');
Le autorizzazioni sono solo una parte del puzzle: se imponi che un utente può eseguire un'azione, dovresti usare il sistema di autorizzazione di Flarum.
I permessi sono solo parte del puzzle: se stai decidendo se un utente puù o non può eseguire un azione, dovresti usare il sistema di autorizzazioni di Flarum.
:::
Permessi e Nomi Convenzionali
Non sei obbligato, ma generalmente raccomandiamo di seguire una convenzione per i nomi dei permessi:
extension-namespace.model-prefix.ability-name
.
Il namespace delle estensioni assicura che il tuo permesso non collida con altre estensioni.
Il prefisso del modello è utile nel caso in cui tu abbia diversi modelli ma permessi simili (flarum-sponsors.discussion.sponsor
vs flarum-sponsors.post.sponsor
).
Namespaces "Magici"
Potresti aver visto alcune call a $actor->can
che non usano il nome completo di un'autorizzazione; ad esempio, $actor->can('reply', $discussion)
, dove il permesso è effettivamente chiamato discussion.reply
.
Questo viene fatto nel core per rendere le call di autorizzazione più brevi e più semplici. Essentially, if the second argument is a discussion, Core's DiscussionPolicy will check the discussion.PROVIDED_ABILITY
permission automatically.
Può essere usato per le estensioni quando il namespace di un modello non è presente: per esempio, $actor->can('someAbility, $discussion)
controllerà il permesso di discussion.someAbility
se l'argomento $discussion
è un'istanza del modello Discussion
. Tuttavia, questo significa che non è possibile prefissare i permessi con i namespace delle estensioni (o è necessario mettere il namespace delle estensioni alla fine).
Queste conversioni magiche basate su modelli sono applicate ai controlli di discussione, gruppo e autorizzazione utente. Per i post, la logica è leggermente diversa: $actor->can('ability', $post)
controllerà $actor->('abilityPosts, $post->discussion)
sulla discussione del post.
Se si desidera utilizzare permessi e autorizzazioni aventi un nome diverso dal nome dell'autorizzazione di backing, si dovrà usare una permesso personalizzato.
Vedi la nostra documentazione sulle autorizzazioni per maggiori informazioni sul metodo can
, le politiche e il modo in cui vengono elaborati i controlli di autorizzazione.
Aggiunta di permessi personalizzati
Per saperne di più sull'aggiunta dei permessi tramite il pannello di amministrazione, consulta la documentazione pertinente.