0 Autorisations shiro RESTful basées sur des données

question créée à Thu, Mar 28, 2019 12:00 AM

Je crée un service RESTful avec Jersey (2.28) et utilise Apache Shiro pour la gestion des autorisations. Donc, j'ai utilisé le buildin 0600350991111101035062 qui crée des autorisations comme HttpMethodPermissionFilter ou 0600350991111001035062. Maintenant, j'ai le problème qu'un utilisateur ne peut être autorisé à lire ou écrire qu'une ressource spécifique et que j'aurais besoin de quelque chose comme 060035099111033062 et à 6303029.

J'ai envisagé d'étendre le filtre, mais à ce moment-là, même si je pouvais accéder au corps ou à l'URL, je n'ai aucune idée de l'apparence des données.

Les solutions auxquelles j'ai pensé:

  1. Toujours passer un paramètre de requête dans l'URL, comme resource:read et, le cas échéant, appliquer ce paramètre à la chaîne d'autorisation. Mais il n’existe aucun moyen de savoir si le paramètre est requis ou non si resource:write et 0600350991111101035062 existent. Le filtre peut créer une mauvaise autorisation pour l'URL donnée. Je pourrais appliquer le filtre uniquement aux URL où je sais que ce doit être le cas, mais cela semble un peu bizarre et sujet aux erreurs.

  2. Supprimez le filtre et demandez les autorisations à l'intérieur de la méthode demandée.

resource:write:<id>

Un peu comme ça, mais cela me laissera avec la gestion des exceptions dans toutes les méthodes, ce qui ne semble pas non plus préférable. Je pourrais peut-être utiliser un resource:write:<name> pour gérer les réponses ... je n'ai pas essayé.

Est-ce que quelqu'un d'autre a peut-être une autre idée de la façon de résoudre ce problème de manière efficace ou peut-être m'indiquez-vous une solution déjà existante? Je préférerais utiliser l'annotation 0600350991111101035062 (ou une annotation personnalisée), mais je pourrais également définir les URL /filtres dans le fichier shiro.ini 0600350991111101035062 ou utiliser la solution 2 si cela est recommandé.

    
1
0 réponses                              0                         
/api/resource?id=xxx
source placée ici