IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Autorisation gérée par ASP.NET C#


Sujet :

ASP.NET

  1. #21
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 26
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Oui tu t'embrouilles.
    Je sais . Je crois qu'une pause s'imposait! ^^
    Merci encore pour ton post, ça m'aide pas mal.

    Si tu veux pour être claire, mon but est que, j'ai plusieurs responsables d'un magasin. Imaginons que j'ai le responsables des légumes, responsables des fruits... Bref. Quand ils s'authentifient et qu'ils sont autorisés à accéder au contenu (c'est-à-dire qu'ils font partis d'un groupe "Responsable_Nomgroupe"), ils peuvent y voir un Gridview mais que des produits dont ils sont responsables, et sont libres de pouvoir supprimer, modifier, ajouter. Seul l'admin peut accéder à tous les produits. Et en fait, au lieu de faire une longue série de "else if" pour chaque groupe du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si Utilisateur fait partie du groupe "Responsable_Legume" alors:
       Requête avec comme condition Produit_libelle="legume"
    Sinon si il fait partie du groupe "Responsable_Fruit" alors:
       Requête avec comme condition Produit_libelle="fruit"
    Et devoir retaper un code à chaque fois que je créais un autre groupe, je voudrais tout simplement faire un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Si utilisateur est authentifié alors:
       Si son groupe ne vaut pas nul alors:
           Requête avec comme condition Produit_nomGroupe=SonGroupe
       Sinon si le groupe vaut nul alors:
           Accès impossible au Gridview
    En ayant rajouter une propriété "Produit_Nomgroupe" qui correspond au nom du groupe Responsable des produits, dans ma table produit...

    J'espère avoir apporter un peu plus de clarté dans mes propos ^^ . Je vais tenter avec tes explications de transformer mon bout d'algo en code .
    Merci encore DotNetMatt pour ta patience et toute ton aide!!

    EDIT: Le seul soucis posé par rapport à ton code c'est le:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Where(group => group.Name == "NomDuGroupeIT")
    où une directive using est absente (mais non proposé en référence). C'est du LinQ? (Désolée je n'en ai jamais fais, je suis plutôt SQL).

  2. #22
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Linsay Voir le message
    J'espère avoir apporter un peu plus de clarté dans mes propos ^^ . Je vais tenter avec tes explications de transformer mon bout d'algo en code .
    C'est un peu plus clair, mais encore une fois il ne faut pas oublier qu'un utilisateur peut faire partie de X groupes. Donc attention si tu pars sur l'idée qu'il ne fait partie que d'un seul et unique groupe, ton code va foirer si ca change. Il vaut mieux se plier à la nature du produit plutôt que d'introduire ce genre de règle. Demain si pour une raison X ou Y tu as besoin de rajouter tes utilisateurs à d'autres groupes, tu seras bien embêtée...

    Citation Envoyé par Linsay Voir le message
    Le seul soucis posé par rapport à ton code c'est le:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Where(group => group.Name == "NomDuGroupeIT")
    où une directive using est absente (mais non proposé en référence). C'est du LinQ? (Désolée je n'en ai jamais fais, je suis plutôt SQL).
    Oui c'est du LinQ, ca permet de filtrer sur la liste des groupes.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #23
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 26
    Par défaut
    Du coup tu me conseillerais plutôt de rester sur la première solution? Recoder à chaque fois ma requête SQL et rajouter des conditions?

    Et quelle est la directive using à ajouter pour ce bout de code? J'ai rajouter une référence à l'assembly System.Data.Linq et System.Xml.Linq mais j'ai toujours la même erreur...

  4. #24
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Linsay Voir le message
    Du coup tu me conseillerais plutôt de rester sur la première solution? Recoder à chaque fois ma requête SQL et rajouter des conditions?
    En fait au début je pensais que tu avais déjà développé quelque chose pour gérer tes utilisateurs et que tu bloquais sur la gestion des rôles, mais là je me rends compte que tu n'as aucun cadre autour de ca... Je te suggère de regarder ce lien : Enabling Windows Authentication within an Intranet ASP.NET Web application. En bref ca explique comment utiliser la Windows Authentication avec ton site, en configurant le web.config et ensuit en utilisant des fonctionnalités dèjà toutes prêtes. Ce que je te suggère c'est de supprimer le code que je t'ai donné, et d'utiliser celui de cet article.

    Ensuite concernant ton algo, tu dois rester sur ce principe :
    Si utilisateur est authentifié alors:
    Si son groupe ne vaut pas nul alors:
    Requête avec comme condition Produit_nomGroupe=SonGroupe
    Sinon si le groupe vaut nul alors:
    Accès impossible au Gridview
    Donc en gros au niveau du code :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Je suppose ici que la méthode GetResults retourne une liste de ResultObject...
    var results = new List<ResultObject>();
     
    if (User.IsInRole(@"DOMAIN\Responsable_Legume"))
    {
    	result = GetResults(@"Responsable_Legume");
    }
    else if (User.IsInRole(@"DOMAIN\Responsable_Fruits"))
    {
    	result = GetResults(@"Repsonsable_Fruits");
    }

    Citation Envoyé par Linsay Voir le message
    Et quelle est la directive using à ajouter pour ce bout de code? J'ai rajouter une référence à l'assembly System.Data.Linq et System.Xml.Linq mais j'ai toujours la même erreur...
    Tu dois rajouter using System.Linq;
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #25
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 26
    Par défaut
    Je te remercie grandement pour toute ton aide, ta patience et tes explications si claires DotNetMatt .
    J'avais déjà configurer mon Web.config de la sorte, mais je vais suivre tes conseils .

    Merci encore, tu m'as fais faire un pas de géant!

  6. #26
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 26
    Par défaut
    Juste un dernier truc, j'ai un peu le même soucis que précédemment. Je veux tester plusieurs solutions, et lorsque j'utilise ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var groupIT = GetGroups(userLogin)
                    .Where(group => group.Name=="NomGroupe")
                    .FirstOrDefault();
    En localhost, tout se passe pour le mieux, par contre sous IIS, j'ai cette erreur:
    System.DirectoryServices.AccountManagement.PrincipalOperationException: Une erreur (5) s'est produite lors de la tentative de récupération des groupes d'autorisations.

    Aurais-tu une idée du pourquoi et comment régler cela? J'ai essayé Google et le forum, mais je n'ai pas trouvé grand monde à qui cela été arrivé.

  7. #27
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    A priori tu retombes sur le même problème qu'au début ! Vérifie le compte avec lequel tourne ton Application Pool : a-t-il suffisamment de droits pour lire l'AD ?

    Si non alors reprends les posts précédents à ce sujet.
    Si oui, as-tu activé l'impersonation dans le web-config ? Pourquoi ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  8. #28
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 26
    Par défaut
    J'ai exactement fait comme tu as dis par rapport à l'AD par rapport aux précédents posts. Comment puis-je vérifier les droits de mon pool d'application??

    J'ai tenté d'activer l'impersonation dans le web.config mais rien n'y fait. Je l'ai donc enlever par la suite.
    J'ai même tenté de passé à une authentification de base en désactivant l'authentification Windows mais j'ai exactement la même erreur... Alors qu'une authentification de base pose beaucoup moins de barrière que l'authentification Windows...
    Je ne comprend pas

  9. #29
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Reprend la discussion à partir d'ici : http://www.developpez.net/forums/d14...p/#post8132250
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #30
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 26
    Par défaut
    Le soucis est que j'ai déjà réalisé tout cela puisque j'ai eu le même problème auparavant...

  11. #31
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Est-ce que tu as une inner exception ? Si oui peux-tu nous dire quel est le message qu'elle contient ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #32
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 26
    Par défaut
    Voici le détail de mon exception:

    [PrincipalOperationException: Une erreur (5) s'est produite lors de la tentative de récupération des groupes d'autorisations.]
    System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte[] userSid, NetCred credentials, ContextOptions contextOptions, String flatUserAuthority, StoreCtx userStoreCtx, Object userCtxBase) +335418
    System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p) +317
    System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups() +53
    ProjetRayon.<GetGroups>d__0.MoveNext() in z:\ProjetRayon\Accueil.aspx.cs:214
    System.Linq.WhereEnumerableIterator`1.MoveNext() +196
    System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source) +247
    ProjetRayon.Accueil.Page_Init(Object sender, EventArgs e) in z:\ProjetRayon\Accueil.aspx.cs:279
    System.Web.UI.Page.OnInit(EventArgs e) +102
    System.Web.UI.Control.InitRecursive(Control namingContainer) +186
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2098

  13. #33
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Hmm ok, est-ce que le compte que tu utilises pour ton application pool fait partie du groupe Windows Authorization Access Group dans l'AD ? (pour référence : KB331951 - Some applications and APIs require access to authorization information on account objects)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. IE 10 non reconnu par asp.Net
    Par Naceur84 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 12/12/2012, 12h09
  2. interpretation de <%= item.IdMenu%> par asp.net
    Par Namzicos dans le forum ASP.NET
    Réponses: 3
    Dernier message: 01/02/2010, 20h30
  3. Réponses: 1
    Dernier message: 06/08/2009, 11h15
  4. Réponses: 0
    Dernier message: 13/04/2009, 17h44
  5. probleme d'envoi de mail par asp.net
    Par tortuegenie dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/03/2008, 09h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo