Je pense que la réponse à votre question va aussi profond que vous souhaitez aller. S'il vous arrive de penser à mettre des rôles dans les groupes, puis associer des groupes avec des utilisateurs ne serait pas assez. Finalement, vous aurez besoin de donner des autorisations à un utilisateur sur un objet spécifique (un forum, une vidéo, etc).
Je suis plus proche de Yuval réponse, tous nous avons besoin est d'associer à l'échelle du projet des objets + actions + utilisateurs. Pour fournir cette; un objet de base (l'Entité) a le sens parfait. Tout objet héritant de l'Entité peuvent être facilement associés à un utilisateur + l'action de cette façon.
Comme vous voulez garder les choses simples; ma suggestion serait;
- N'importe quel objet en raison de rbac restrictions devraient découler d'une Entité de base.
- Il devrait y avoir une liste de rôles, qui sont des one-to-one relation avec une Entité.
- Il devrait y avoir une liste de relations entre les utilisateurs et les rôles.
De prendre les choses un peu plus loin, je voudrais aussi vous conseille la suivante (pour un système automatisé de rbac)
- J'utilise le service d'accès basé à mes objets. Qui est; je repository de créer des objets (qui ne le db-accès pour moi) et je dépôts d'accès via des fonctions de service.
- Je utiliser un attribut personnalisé au début de chaque fonction de service. Ceci définit le rôle requis pour accéder à cette fonction.
- J'utilise le paramètre Utilisateur d'accéder à tous mes fonctions de service, et chaque fonction de service ne un rôle vérifier avant d'exécuter lui-même. La réflexion m'aide à comprendre la fonction que j'appelle, et quel genre de rôle qu'elle a (via des attributs personnalisés)
- J'ai également exécuter un initialiseur sur mon démarrage de l'application, et il vérifie pour toutes les fonctions (et leurs attributs) et voit si j'ai ajouté un nouveau rôle requis. Si il y a un rôle que je viens d'ajouter et ne semble pas être sur la db, il crée sur db.
Mais hélas, c'est juste disponible pour .NET, pour autant que je sais que Java n'a pas d'attributs personnalisés ce qui n'est pas encore susceptibles d'être disponibles pour Java.
Je tiens à venir avec des exemples de code, mais je suis trop paresseux pour le faire. Toujours si vous avez des questions sur ma façon de rbac; vous pouvez demander ici et je vais sûrement la réponse.