Je pense qu'essayer de lier des autorisations à des comptes est votre problème, vous devez ajouter un deuxième 'calque'. Restons dans Google Analytics comme exemple:
Supposons que Joe Bloggs souhaite utiliser Google Analytics. Il doit d'abord créer un compte Google (en supposant qu'il n'en a pas déjà un). Il crée ensuite un compte Google Analytics pour son site . Say Joe veut alors donner accès à Jane Smith, supposons qu'elle a déjà un compte Google. Pour lui donner accès tout ce qu'il fait, c'est donner son compte Google à son site , il ne lui donne pas accès à son compte Google.
Zend_Acl est basé sur les rôles, essayons donc d'appliquer les concepts ZF à cet exemple. Les écrans de gestion des utilisateurs dans GA vous permettent de donner aux utilisateurs soit l'accès "Afficher les rapports uniquement", soit "Administrateur du compte". Donc, vous souhaitez définir un rôle dans Zend_Acl pour chacun de ces niveaux d'accès:
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('admin'), 'guest');
le second paramètre sur addRole signifie que le rôle doit hériter de toutes les autorisations de l'autre rôle spécifié. Donc ce que j'ai fait ci-dessus est de définir deux rôles: guest et admin; et ledit administrateur doit hériter de toutes les autorisations que l'invité a. Vous avez alors vos 'ressources', qui sont les choses auxquelles vous pouvez avoir accès. Donc, nous allons définir un pour les rapports, et une pour la gestion des utilisateurs:
$acl->add(new Zend_Acl_Resource('reports'));
$acl->add(new Zend_Acl_Resource('users'));
nous alors donner un accès « invité » les rapports, et l'accès « admin » aux utilisateurs:
$acl->allow('guest', 'reports');
$acl->allow('admin', 'users');
puis dans les contrôleurs concernés (ou plug-in, ou chaque fois), vous pouvez vérifier les autorisations:
public function reportsAction()
{
[...]
// assume $role contains the role of the currently logged in user
if (!$acl->isAllowed($role, 'reports')) {
// show a permissions error
}
}
public function usersAction()
{
[...]
if (!$acl->isAllowed($role, 'users')) {
// permissions error
}
}
en ce qui stocker ce MySQL GOES, vous avez juste besoin d'une table de consultation qui relie les utilisateurs, les sites (dans cet exemple) et les rôles :
userID | siteID | role
1 1 admin
2 1 guest
En clair: Cela signifie-t-il que vous devez créer des groupes d'utilisateurs? – takeshin
Est-ce vraiment mysql spécifique? La plupart des applications Web implémentent des «comptes» au niveau de l'application et n'utilisent la base de données qu'en tant que magasin de données. De même, vous semblez utiliser l'utilisateur/administrateur de plusieurs façons dans votre question. Plus de détails seraient bons, avec de meilleurs exemples concrets. Mais en essence vous semblez parler d'autorisations transitives –
Laissez-moi voir si je peux être plus clair. Un "administrateur" est la personne qui possède le compte. Un "utilisateur" est une personne autorisée à utiliser le compte mais sans les autorisations d'administration. Disons que nous avons deux comptes. Les comptes sont uniques en fonction de l'adresse e-mail. Le compte 1 souhaite que le compte 2 gère leur compte à leur place. Pour que cela se produise, le compte 1 doit autoriser l'autre compte. Cela permettrait au compte 2 de se connecter à son propre compte, puis de cliquer sur un lien pour gérer le compte 1. Ce concept est très similaire au fonctionnement de la gestion de compte Google Analytics et Google Adwords. – user387990