2012-03-13 2 views
1

Je crée un site Web Grails où les utilisateurs auront accès aux ressources qu'ils créent. Jusqu'à ici, tout est clair pour moi. Je définis ROLE_USER et verrouille mes contrôleurs et mes actions en utilisant le fichier Config.groovy.Autorisations de groupe pour un site Web utilisant la sécurité de printemps - requête de conception

Le problème auquel je suis confronté est que j'ai besoin de supporter un groupe d'utilisateurs de sorte que certaines ressources créées par un utilisateur puissent être éditées/mises à jour/supprimées par d'autres utilisateurs du même groupe. Comment associer un utilisateur avec un "groupe" dans la sécurité de printemps, quelle est la conception/bibliothèque que je devrais utiliser ici?

Répondre

1

Ce que vous devez faire est d'avoir les rôles de vos utilisateurs (les autorisations) proviennent de la base de données. Une fois que c'est le cas, vous pouvez alors facilement ajuster les rôles d'un utilisateur (ou d'un ensemble d'utilisateurs) et les créer/les supprimer à la volée. Les docs ont de très bonnes infos sur comment obtenir les rôles à partir de la base de données, donc je ne vais pas aller plus loin dans ce domaine. Une fois les rôles dynamiques en place, vous devez toutefois pouvoir connecter les rôles aux objets créés. Il existe essentiellement deux façons dont vous pouvez aller sur le faire:

  1. Access Control Lists
  2. logique personnalisée

En fonction de la granularité dont vous avez besoin et la flexibilité que vous voulez, une option peut être plus attrayante qu'un autre.

Les listes de contrôle d'accès vous permettent essentiellement d'avoir un mappage d'autorisations entre chaque utilisateur et chaque instance d'entité. Comme vous pouvez l'imaginer, c'est un peu lourd et peut mal fonctionner si vous avez un grand nombre d'entités et d'utilisateurs. D'autre part, la mise en place de votre propre logique est beaucoup plus flexible, car vous pouvez configurer votre propre système pour connecter des instances d'entités ou des classes d'entités aux utilisateurs et à leurs rôles.

1

Je ne pense pas que la sécurité de printemps offre une telle fonctionnalité hors de la boîte, donc vous devrez le faire manuellement. Pour chaque classe de domaine que vous ce genre de fonctionnalité, de stocker le nom d'utilisateur de journalisés actuel utilisateur

def authenticateService 

def user = authenticateService.principal() 
entity.setUser(user?.getUsername()) 

Ensuite, dans la mise à jour/supprimer la méthode du contrôleur que vous devriez vérifier si le rôle de l'utilisateur connecté actuel utilisateur correspond au rôle de l'utilisateur qui a créé l'entité. Si vous avez une correspondance, vous devez procéder à la mise à jour/suppression sinon lancer une exception /rediriger l'utilisateur vers une page d'erreur

En tant que rôle, vous pouvez utiliser les rôles de sécurité de printemps ou vous pouvez créer une propriété sur l'objet utilisateur ont créé

+0

Problème lié à l'utilisation des rôles à chaque fois qu'un utilisateur démarre un «groupe», un nouveau rôle doit être attribué dynamiquement à ce groupe d'utilisateurs, ce qui ne semble pas possible. Ai-je du sens? – Abe

+0

Je ne suis pas sûr si je comprends. Il me semble que c'est la procédure normale quand un nouveau rôle est introduit, il devrait être assigné à certains utilisateurs. – dimcookies

Questions connexes