0

Dans mon application Asp.NET Core WebApi, je souhaite ajouter des autorisations aux propriétés dans ViewModel, puis personnaliser un filtre ActionFilter pour filtrer la valeur de réponse. Si l'utilisateur n'a pas l'autorisation, la propriété sera remplacée par une valeur de rappel. Maintenant, je souhaite utiliser Autoriser la stratégie pour vérifier l'autorisation.Comment obtenir toutes les politiques Autoriser que j'ai ajouté dans le noyau Startup.ConfigureServices dans Asp.Net?

Comment obtenir toutes les politiques Autoriser que j'ai ajouté dans le Startup.ConfigureServices?

public void OnActionExecuted(ActionExecutedContext context) 
    { 
     if (!(context.Result is JsonResult)) return; 
     var c = (JsonResult)context.Result; 
     var pas = c.Value 
       .GetType().GetTypeInfo() 
       .GetProperties() 
       .Where(p => p.GetCustomAttribute<PropertyPermissionAttribute>() != null) 
       .Select(p => 
       { 
        var attr = p.GetCustomAttribute<PropertyPermissionAttribute>(); 
        return (p, attr); 
       }); 

     // ** How to Get All Policies ?? ** 


     foreach (var (p, a) in pas) 
     { 
      // Check Policies 

      var cb = a.CallbackValue; 
      if (cb!=null && p.PropertyType == cb.GetType()) 
      { 
       p.SetValue(c.Value, cb); 
      } 
      else 
      { 
       p.SetValue(c.Value, null); 
      } 
     } 
    } 

Ou est-il d'autres moyens pour mettre en œuvre des autorisations à des propriétés de ViewModel?

Répondre

0

Je pense que c'est impossible. Les stratégies sont stockées dans un champ privé. See source. Cependant, je ne comprends pas pourquoi vous avez besoin de toutes les politiques? Vous pouvez obtenir la politique nécessaire de IAuthorizationPolicyProvider.GetPolicyAsync(string policyName) si vous stockez le nom de la politique dans PropertyPermissionAttribute.

+0

Merci, c'est ça! Mais comment puis-je vérifier l'utilisateur par la politique? –

+0

[Par le biais du gestionnaire d'autorisation personnalisé] (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased). –

+0

Probablement parce qu'il veut obtenir une liste de toutes les politiques disponibles pour un administrateur de site pour configurer les utilisateurs via la vue. C'est au moins ce que je voulais faire. J'ai des entrées db correspondantes dans AspNetUserClaims mais l'interrogation des personnes présentes ne vous donne pas une liste de toutes les réclamations/politiques potentielles. – Dave