2010-09-13 3 views
0

Nous développons une application web en utilisant le framework Zend et Mysql.Accorder l'accès utilisateur

Actuellement, les comptes sont uniques par adresse électronique. Nous voulons être en mesure d'autoriser l'administrateur d'un compte à accorder l'accès à l'administrateur d'un autre compte. Cette personne serait alors un "utilisateur" du compte associé. Le titulaire du compte se connecterait ensuite à son compte administrateur, puis sélectionnerait le compte auquel il souhaite accéder.

Veuillez noter: l'accès est limité à un sens. Le compte 1, qui accorde l'accès au compte 2, ne doit pas pouvoir accéder au compte 2. Seul le compte 2 peut accéder au compte 1. Si le compte 1 veut accéder au compte 2, le compte 2 doit alors autoriser l'accès au compte 1.

Quelle est la meilleure méthode pour y remédier?

+0

En clair: Cela signifie-t-il que vous devez créer des groupes d'utilisateurs? – takeshin

+0

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 –

+0

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

Répondre

1

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 
Questions connexes