Un buon esempio di questa configurazione sarebbe un elenco di controllo di accesso (ACL). Zend Framework ( link ) ha un componente di permessi che implementa questo tipo di installazione. La scomposizione generale è che alcuni modelli implementano un'interfaccia Role e altri modelli implementano un'interfaccia Risorse. Viene creato un elenco (utilizzando un modello di registro tramite la configurazione del file o nel codice) che definisce se un ruolo può accedere a una risorsa e dispone di un privilegio specifico. Mi piace pensare ai privilegi come a una lista di azioni. C'è molto da esplorare in quel componente.
<?php
//$acl has been previously defined and loaded
echo $acl->isAllowed('someUser', 'someResource', 'somePrivilege') ? 'yup' : 'nope'; ?>
//$user is currently not logged in and has a 'guest' role
if ($acl->isAllowed($user->getRole(), 'paidArticles', 'view') {
//Show the paid articles, secrets and all that
} else {
//Only show free articles
}
if ($acl->isAllowed($admin->getRole(), 'userList', 'delete') {
//Allow $admin to delete users from the list
} else {
//Perhaps log that someone is trying to access something they shouldn't
}
?>
Mentre mi rendo conto che questo è, o potrebbe trasformarsi in un insieme complesso di If-Thens, a un certo punto dovrai avere un metodo per dire "Se l'accesso è consentito, quindi mostra X contenuto / widget / etc" . Se le autorizzazioni sono abbastanza semplici, dovrebbe rimanere semplice. Penso che il vantaggio principale qui sia quello di permettere un piuttosto semplice isAllowed () e di darti un vero / falso basato sul fatto che tu abbia i ruoli, le risorse e l'impostazione delle azioni. Passato è molto flessibile su ciò che fai mentre esegui una query sull'ACL.