Vous n'êtes en aucun cas limité à l'utilisation du système de rôle pour désigner des groupes dans Zend_Acl
.
Par exemple:
Dans une application, j'ai mon objet utilisateur de base, mettre en œuvre Zend_Acl_Role_Interface
qui, dans ce cas, renvoie une chaîne qui est spécifique pour l'utilisateur. Par souci de simplicité, disons simplement quelque chose comme user-1
, où la partie numérique est l'ID unique de l'utilisateur.
Lorsque l'objet utilisateur est initialisé, il s'ajoute à l'ACL, le rôle spécifique de l'utilisateur héritant d'un rôle plus générique (semblable à un groupe.):
if(!$acl->hasRole($this)) {
$acl->addRole($this, $this->role); // Let's say role == 'member' here
}
Cela vous permet de définir général règles pour le rôle parent (ou rôles, vous pouvez passer un tableau en tant que deuxième argument à addRole, pour avoir plusieurs parents.) Rappelez-vous que les rôles ont une lignée tout le long de l'arbre, donc le rôle parent dans ce cas peut aussi Donc, pour illustrer la flexibilité ici, supposons que cette base ACL mis en place (Tout cela est théorique, je suis wri ting ce dans le seul but de cette réponse):
$acl->addRole('guest');
$acl->addRole('member', 'guest');
$acl->allow('guest', 'comments', 'read');
$acl->allow('member', 'comments', 'write');
$user = $My_User_Model->find(1);
$acl->allow($user, 'comments', 'moderate');
$acl->isAllowed($user, 'comments', 'read'); // true
$acl->isAllowed($user, 'comments', 'write'); // true
$acl->isAllowed($user, 'comments', 'moderate'); // true
$acl->isAllowed('member', 'comments', 'moderate'); // false
Et ainsi de suite ...
La beauté des composants de Zend Framework est que vous n'êtes pas du tout limité à les utiliser dans un spécifique façon. Oui, même si cela peut parfois être décourageant et nécessite souvent un peu plus de temps pour la planification initiale et la mise en œuvre, c'est formidable à long terme.
En outre, personnellement, je ne suis pas un fan du mappage direct des privilèges ACL à un contrôleur/construction d'action. Mais c'est une conversation totalement différente.