2010-10-26 7 views
1

Je me demandais si quelqu'un serait en mesure de m'aider avec ce qui suit?Autorisation des utilisateurs d'applications Web contre les informations sur les utilisateurs ainsi que le rôle

J'ai besoin de règles plus compliquées pour l'autorisation dans une webapp que juste le rôle, que j'ai bien fonctionné. Quelque chose du genre «Permettre à tous les administrateurs d'autoriser les acheteurs, à condition qu'ils aient l'ID de service approprié et qu'ils soient autorisés à voir les informations d'identification de ce client». J'utilise une identité personnalisée et une entité personnalisée pour stocker des informations telles que l'autorisation pour un utilisateur de voir tous les clients ou les clients individuels qu'ils peuvent voir. Cette information est extraite d'une base de données et ajoutée lors de la création de l'identité/principal.

J'ai créé une autorisation personnalisée qui étend IPermission, ISecurityEncodable. Dans ce cadre, je l'ai modifié la fonction demande() à ce qui suit:

public void Demand() 
    { 
     this._identity = (UserIdentity)Thread.CurrentPrincipal.Identity; 
     if (Thread.CurrentPrincipal.IsInRole("Admin")) { } 
     else if ((Thread.CurrentPrincipal.IsInRole("Buyer")) && 
       (this._identity.CanViewAllClients) && 
       (this._identity.IsInDept(this._departmentID))) { } 
     else if ((Thread.CurrentPrincipal.IsInRole("Buyer")) && 
       (this._identity.CanViewClient(this._requestedClient)) && 
       (this._identity.IsInDept(this._departmentID))) { } 
     else { throw new SecurityException("Custom Permission Denied"); } 
    } 

J'appelle alors quand je souhaite autoriser en utilisant

CustomPermission custperm = new CustomPermission(requestedClient, reqClientDept); 
custperm.Demand(); 

Cela fonctionne très bien, mais semble un désordre, hacky façon de faire les choses. Surtout que ce serait bien d'utiliser mes rôles de sécurité comme attribut, par ex.

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)] 
public class... 

Peut-être il y a un moyen d'appeler [CustomPrincipalPermission (SecurityAction.Demand, autorisé = true)] avec une coutume IsAuthorised vérifier? Est-ce possible? Qu'est-ce qui devrait être mis en œuvre? Je m'excuse s'il y a une solution simple que j'ai manqué en ligne, mais rassurez-vous que je vérifie depuis des jours maintenant.

Répondre

0

Il semble que ce que vous voulez soit une demande déclarative plutôt que programmatique. Pour ce faire, vous devez créer un CustomPermissionAttribute en fonction de votre CustomPermission.

Il existe un exemple de demande déclarative d'une autorisation personnalisée here et des détails sur la création d'un attribut d'autorisation personnalisé here.

Questions connexes