none
Gestion des droits sur les méthodes

    Question

  • Bonjour a tous , 

    je développe une application avec asp.net (Mvc) c# et je voudrais limité l'accès en lecture, écriture... 
    Donner un droit d'accès suivant les rôles active directory. 
    Par exemple, j'ai une méthode "Save" et seuls les administrateurs peuvent l'utiliser. 
    Comment pourrais-je procéder? 
    Merci
    lundi 25 mars 2013 11:19

Réponses

  • Bonjour,

    Il faut mieux utiliser "if (HttpContext.Current.User.IsInRole("Administrators"))" pour rediriger vers une page d'erreur.

    L'attribut [PrincipalPermission] est juste une sécurité supplémentaire à mettre dans les couches inférieures afin de s'assurer qu'un utilisateur (pirate ou bug de votre appli) qui bypass votre "HttpContext.Current.User.IsInRole("Administrators")" ne puisse pas continuer à exécuter du code non autorisé...

    En tant normal, une application bien conçu et qui fonctionne dans les conditions normales ne doit jamais lever d'exception.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse jayce23 mardi 26 mars 2013 12:13
    mardi 26 mars 2013 11:57

Toutes les réponses

  • Bonjour,

    Utilisez l'attribut PrincipalPermissionAttribute :

    [PrincipalPermission(SecurityAction.Demand, Role = "Administrateurs")]
    public void AdministrateursSeulement()
    {
        
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0


    lundi 25 mars 2013 14:22
  • Bonjour,

    Au passage vous pouvez obtenir des informations sur cet attribut à cet adresse :

    http://msdn.microsoft.com/en-us/library/system.security.permissions.principalpermissionattribute.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 25 mars 2013 14:24
  • Merci pour ta réponse.

    J'aurai 2 questions.

    1) J'ai donc bien utilisé PrincipalPermissionAttribute comme ceci : 

    [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
            public static int Save(){...}

    ça fonctionne super, mais lorsque je met "Administra" par exemple, ça me lance une exception et moi je veux que ça me renvoie vers une page Error...

    2) Lorsque je mets "Users" (qui est un groupe existant) au lieu de "Administrators", ça passe quand même. Pourtant je suis administrateur.

    mardi 26 mars 2013 08:21
  • J'ai vu qu'il y avait aussi la possibilité d'utiliser isInRole :

    if (HttpContext.Current.User.IsInRole("Administrators"))...

    C'est bon aussi? Ou alors il serait mieux d'utiliser PrincipalPermissionAttribute?

    mardi 26 mars 2013 11:44
  • Bonjour,

    Il faut mieux utiliser "if (HttpContext.Current.User.IsInRole("Administrators"))" pour rediriger vers une page d'erreur.

    L'attribut [PrincipalPermission] est juste une sécurité supplémentaire à mettre dans les couches inférieures afin de s'assurer qu'un utilisateur (pirate ou bug de votre appli) qui bypass votre "HttpContext.Current.User.IsInRole("Administrators")" ne puisse pas continuer à exécuter du code non autorisé...

    En tant normal, une application bien conçu et qui fonctionne dans les conditions normales ne doit jamais lever d'exception.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse jayce23 mardi 26 mars 2013 12:13
    mardi 26 mars 2013 11:57
  • Ok merci de l'aide :)

    mardi 26 mars 2013 12:05