2009-09-21 4 views
4

C'est un peu vague voici donc les choses charnue:Comment gérer les rôles utilisateur de manière efficace?

J'ai vu des systèmes d'authentification qui effectuez l'une des opérations suivantes

  1. ont une table de rôle distinct pour chaque rôle, et une table d'autorisations séparées, tous les utilisateurs une table
  2. ont une table séparée pour les administrateurs

il y a beaucoup que je l'ai manqué, je sais. Mais ce que j'essaie de vraiment demander, c'est:

Comment devrais-je concevoir ma base de données dans un site web où j'ai beaucoup de types d'utilisateurs et chacun avec un accès différent?

Comment vais-je faire en sorte que mon script soit assez flexible si je décide d'ajouter un autre type d'utilisateur avec un autre type d'autorisations?

J'ai actuellement une classe User et je prévois de créer ma classe Administrator qui étend cette classe User. Ou est-ce un peu exagéré quand je peux les avoir tous dans une seule classe et juste assigner les autorisations nécessaires?

Répondre

3

vous pouvez avoir des tables -

user (user_id, name ...) 
permission (perm_id, name, desc) 
role (role_id, title) 
user_role (user_id, role_id) 
user_permission (user_id, perm_id) 
role_permission (role_id, perm_id) 

De cette façon, vous pouvez avoir autant de rôles dans le système que vous avez besoin, et vous avez les autorisations de niveau de rôle, les autorisations de niveau utilisateur.

2

vous pouvez ajouter un niveau d'abstraction supplémentaire. En gros, vous ajoutez une table dans votre base de données pour gérer les groupes d'utilisateurs et attribuer des autorisations de groupe à ces groupes. différents utilisateurs peuvent avoir plusieurs groupes. De cette façon, vous pouvez rapidement modifier les autorisations d'un ensemble de règles prédéfini, sans avoir besoin de changer chaque utilisateur séparément. vous pouvez également modifier les autorisations pour un groupe d'utilisateurs à la fois

1

Je pense que vous devez réfléchir à plusieurs concepts ici. La première serait une liste de contrôle d'accès (ACL) et la seconde serait l'authentification.

Dans une ACL, vous définissez les ressources , qui sont des objets que vous souhaitez restreindre l'accès et rôles, qui sont des objets qui peuvent demander l'accès à une ressource.

La façon dont j'implémente mon ACL, utilise Zend_Acl. J'ai une table appelée user_roles

user_roles('user_role_id', 'name', 'permissions', 'parent_role_id')` 

J'ai aussi une table appelée user_role_maps qui associe l'identifiant d'un utilisateur à un ID de rôle utilisateur. (Vous pourriez avoir ceci comme une colonne sur la table des utilisateurs, mais cela dépend de ce que vous pensez de la normalisation ;-).) Je peux ensuite construire mon objet Zend_Acl à partir de cette table puis, lorsqu'un utilisateur est authentifié, je peux déterminer les ressources auxquelles ils ont droit et les actions qu'ils peuvent effectuer sur une ressource. (Une ressource met en œuvre Zend_Acl_Resource_Interface de sorte qu'il est identifiable par Zend_Acl comme une ressource.

En ce qui concerne l'authentification, ce concept est plus simple (à mon avis), vous avez probablement déjà compris une certaine forme de système d'authentification de correspondance jeton vous.L'aspect crucial consiste à utiliser l'identifiant de l'utilisateur authentifié pour déterminer son rôle. Zend Framework fournit également un package pour cela dans Zend_Auth. J'ai utilisé beaucoup de recommandations de Zend Framework, la raison en est que leurs paquets ont très peu de dépendances sur d'autres paquets, ce qui rend la connexion de composants assez simple. Je suis sûr que d'autres frameworks fournissent des paquets ACL que vous pourriez utiliser, ou déployer le vôtre si vous avez le temps et la compréhension.

Bonne chance.

Questions connexes