Même si c'est possible, il est généralement recommandé de conserver les revendications «à gros grains». Par défaut, dans une application Web, l'ensemble de revendications sera envoyé à chaque requête (comme il est sérialisé dans les cookies), de sorte que vous aurez une charge potentiellement importante sur le réseau.
Vous pouvez remplacer cela en configurant WIF à utiliser « session » par opposition aux cookies, mais ... vous obtenez tous les inconvénients de la session du côté serveur (par exemple configuration pour WebFarms, affinité, etc.)
L'autre chose à consdier avec cette approche est le maintien de cette connaissance dans le STS. Vous devrez conserver un ensemble assez important de règles pour émettre ces réclamations susceptibles de changer souvent.
Vous ne voulez certainement pas tout cela dans un STS d'infrastructure centrale car il va devenir le goulot d'étranglement d'un ensemble potentiellement important d'applications. Donc, vous finirez par mettre toute cette logique dans un RP-STS (et STS qui est associé à votre application). Pas impossible, mais probablement gênant.
En règle générale, le plus grand avantage d'une demande « autorisation » est que le gestionnaire d'autorisation est tricial d'écrire:
if(PrincipalContainsDocumentClaim(documentYouAreTryingToOpen)
ShowDocument(documentYouAreTryingToOpen);
else
AccessDenied(documentYouAreTryingToOpen);
Je pense une meilleure approche est d'avoir un gestionnaire d'autorisation qui est en mesure de répondre aux questions :
bool HasAccess(IPrincipal p, string document)
A l'intérieur de ce composant, vous utiliseriez l'ensemble de revendications pour décider si l'utilisateur a ou non accès. Cette logique peut inclure le mappage des rôles, des noms d'utilisateurs et peut-être d'autres revendications "d'ordre supérieur" (par exemple l'organisation à laquelle vous appartenez, le pays dans lequel vous vous trouvez, etc.) en autorisations. Un autre problème des "revendications d'autorisation" est que si vous effectuez une modification (par exemple, vous accordez l'accès à un utilisateur connecté), comment actualisez-vous l'ensemble de revendications? Vous devez vous déconnecter, ce qui n'est normalement pas une bonne expérience utilisateur.
Merci Eugenio pour une explication détaillée et c'est exact la performance serait le problème majeur et il est préférable d'utiliser des revendications personnalisées pour les attributs de haut niveau. La façon dont j'essayais d'attribuer une permission en utilisant des revendications personnalisées est en utilisant SPRoleDefinition et SPRoleAssignment. Où puis-je trouver d'autres exemples d'utilisation du gestionnaire d'autorisation, PrincipalContainsDocumentClaim? Merci encore – aYus
Merci Engenio. information très utile – aYus