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 :

régle d'accès aux pages enfants [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut régle d'accès aux pages enfants
    Bonjour à tous, débutant en programmation c# je suis en cours de création d'une page web avec ASP.NET.

    J'ai à peu près bien compris la définition des rôles et des autorisations, seulement j'aimerais savoir si il est possible de n'autoriser l'accès qu'à des sous-menus (pages enfants) non créer à la conception du site mais pendant son utilisation.

    Je m'explique : Dans le menu de ma page Master, j'ai créer différents menu 'Parents' en plus de la page d'accueil et de la page A propos.
    ces pages sont : Expert et Superviseur.
    Sous la Page Expert (accès autorisé à l'admin et à l'expert mais refuser aux superviseurs) on retrouve 2 sous-menu alors qu'il n'y a rien (pour le moment) sous la page Superviseur (accès autorisé à l'admin, à l'expert et aux superviseurs).

    Au cours de l'utilisation, l'expert via un sous menu 'création Lieu' va créer des nouvelles pages pour le menu Superviseur. (exemple : Site1, Site2, etc...)

    Ce qui m'intéresse c'est de pouvoir donner l'accès à la page Site1 uniquement à un nombre définis d'utilisateurs reconnus sous le role superviseur, idem pour la page Site2 (pas les mêmes que Site1) etc...
    Actuellement ce n'est pas le cas puisque les utilisateurs ayant le rôle superviseur ont accès à toutes ces nouvelles pages crées.

    Merci de votre aide

  2. #2
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Salut,

    Il existe plusieurs solutions pour ça. La première qui me vient serait de créer une classe héritant de System.Web.Page dont l'accès ne serait réservé qu'à un profil/groupe.

    Ainsi, lorsque tu créeras des pages à la volée, au lieu de créer une System.Web.Page, tu crées une "AdministratorPage" ou une "SupervisorPage", par exemple.

    En espérant que ça puisse t'aider...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Création physique du fichier ou dynamique ?

  4. #4
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Re,

    Je crois que le monsieur veut des pages physiques ET dynamiques.

    Bref, si je reviens, c'est juste pour préciser qu'il existe une solution encore plus simple. Au niveau du web.config, il est possible de restreindre l'accès à certains répertoires.

    Ainsi, tu n'aurais rien à faire côté code si tu crées tes pages dans des répertoires distincts. Le répertoire "AdministratorFolder" ne serait ainsi accessible qu'aux personnes ayant le rôle admin.

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <location path="AdministratorFolder">
    <system.web>
        <authorization>
        <allow roles="Admin"/>
        </authorization>
        </system.web>
    </location>

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Il s'agit bien d'une création physique et dynamique (création des pages Site1, Site2, etc....) à partir d'une TextBox et d'un Bouton accessible uniquement par l'admin et/ou l'expert sous un sous-menu (création site.aspx) de l'onglet Expert.

    A la création du programme, j'ai prévu sous la racine un repertoire expert (sous lequel on retrouve la page création site.aspx + une autre utilisées par les utilisateurs ayant le rôle d'expert) et un répertoire superviseur (sous lequel il y a le fichier site.aspx servant de support à la création des fameuses pages Site1, Site2, etc.....)

    Pour la création de ces nouvelles pages, je passe les paramètres dans la page Site.Master.cs en utilisant la fonction MenuItem et tout le code qui va avec.

    Une fois existante ces pages apparaissent sous l'onglet Superviseur (qui n'a rien au départ) et sont donc pour le moment accessibles à tous les utilisateurs ayant le role superviseur. ces pages seront exploitées par la suite pour d'autres taches....

    si je regarde le fichier web config du répertoire Superviseur j'ai :
    <system.web>
    <authorization>
    <allow roles="Superviseur"/>
    </authorization>
    </system.web>

    sous la page web config du répertoire Expert j'ai :
    <system.web>
    <authorization>
    <allow roles="Admin"/>
    <allow roles="Expert"/>
    <deny roles="Superviseur"/>
    </authorization>
    </system.web>

  6. #6
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Je pense qu'il est préférable de cacher les menus dont l'utilisateur n'a pas les droits.

    Voici un petit bout de code qui montre comment cacher des boutons selon le rôle de l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <asp:TemplateField ShowHeader="False">
         <EditItemTemplate>
              <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
                   CommandName="Update" Text="Update"></asp:LinkButton>
     
               <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
                    CommandName="Cancel" Text="Cancel"></asp:LinkButton>
     
         </EditItemTemplate>
         <ItemTemplate>
              <asp:LinkButton ID="EditButton" runat="server" CausesValidation="False"
                   CommandName="Edit" Text="Edit"></asp:LinkButton>
     
               <asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False"
                   CommandName="Delete" Text="Delete"></asp:LinkButton>
     
         </ItemTemplate>
    </asp:TemplateField>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected void UserGrid_RowCreated(object sender, GridViewRowEventArgs e)
    {
         if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex != UserGrid.EditIndex)
         {
              // Programmatically reference the Edit and Delete LinkButtons
              LinkButton EditButton = e.Row.FindControl("EditButton") as LinkButton;
     
              LinkButton DeleteButton = e.Row.FindControl("DeleteButton") as LinkButton;
     
              EditButton.Visible = (User.IsInRole("Administrators") || User.IsInRole("Supervisors"));
              DeleteButton.Visible = User.IsInRole("Administrators");
         }
    }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Merci katKiller pour l'info. Dans quelle page je dois coller ce code ?

    Et si je remplace le rôle Superviseur (j'ai pour le moment 5 utilisateurs sous ce rôle) par 2 rôles Superviseur1 (3 utilisateurs) et Superviseur2 (2 utilisateurs) est-ce que le résultat sera plus facile à obtenir ?

    En tout cas merci à tous ceux qui ont ou vont m'aider sur ce problème.

    C'est la première fois que je crée un site web en c# et j'ai encore plein de lacune.

  8. #8
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Arf, en fait, ce n'était pas l'accès aux pages mais la visibilité des contrôles qui te posait problème... tss.

    Ben ouais, dans ce cas, si ton contrôle est un contrôle serveur, il te suffit de faire MonControle.Visibility = User.IsInRole(RoleSouhaite);

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Bonjour Arno, comme je l'ai dis j'ai peut etre pas toutes les notions en c# alors qu'appelles-tu un contrôle et un contrôle serveur ?

    Pour moi, c'est bien l'accès aux pages (crées par les 2 utilisateurs ayant le rôle d'expert en cours d'utilisation et qui apparaitrons en suite sous le menu Superviseur) qui me pose problème.

    Aujourd'hui mes 5 utilisateurs (rôle superviseur) ont accès après identification sur le site à toutes ces nouvelles pages crées sous le menu Superviseur (pas de possibilité de consulter les pages du menu expert puisque pas autoriser). Ce qui m'intéresse par exemple c'est que 3 d'entre eux n'est de visibilité (consultation, action sur les éléments de cette page, etc...) que sur une page bien précise du menu Superviseur et que les 2 autres est la même chose sur une seconde page et dans l'avenir peut etre d'autres utilisateur (avec le role superviseur) auront le droit de ne voir qu'une 3ème page etc......

    Je me suis interrogé sur la possibilité de supprimer le role superviseur et de créer 2 autres roles en fonction de mes utilisateurs, mais suivant la conception de mon site je me rends compte que ça ne va servir à rien.

  10. #10
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Un contrôle est un élément du DOM comme un input, un div, etc.

    Un contrôle serveur, c'est la même chose mais géré côté serveur. Chez MS, par exemple, un input de type text est une asp:textbox. Une fois interprétée par le compilateur, ça devient un input.

    Cela dit, d'après ton dernier post, ce sont finalement bien les autorisations d'accès et non de visibilité que tu souhaites affiner.

    A toi de voir selon ton besoin mais la solution la plus simple semble peut-être quand même de créer de nouveaux rôles. Si je comprends bien ton message, tu as 5 superviseurs mais tu ne souhaites pas qu'ils aient les mêmes droits. Il faudrait peut-être les "éclater" en sous-rôles (superviseur de niveau 1, de niveau 2, etc.).

    Bon courage

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Mes 5 superviseurs ont pour le moment bien les mêmes droits d'accès (menus par défaut (accueil et A propos) et menu Superviseur) seulement je ne veux pas qu'ils puissent avoir la même visibilité sur les pages (sous-menu) du menu superviseur en fonction d'où ils sont (exemple : 3 sur le site1 n'ont le droit de voir que la page Site1 et les 2 autres la page Site2). Ces 2 pages Site1 et Site2 ayant la même structure de conception mais pas forcement les mêmes infos dans le contenu (ça c'est moi qui le gère par code dans la conception de ma page site.cs).

    Pour résumé les 3 superviseurs (utilisateurs) à 'Paris' (par exemple) ne doivent avoir de visibilité (accès) qu'à la page 'Paris' et les 2 autres à 'Tours' qu'à la page 'Tours'.

    Ces 2 pages 'Paris' et Tours' étant des sous-menus de la page principale Superviseur (accessible de part la définition des rôles par mes 5 utilisateurs).

    Si il est possible au final de créer des sous-rôles ayant accès à ces différents sous-menus sans tenir compte de la page parent je prends, sinon je ferais sans.

    Merci.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    si ça peut aider, voilà le code que je passe dans ma page Site.Master.cs

    public partial class SiteMaster : System.Web.UI.MasterPage
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    MenuItem MenuSite = NavigationMenu.Items[2]; //sélectionne le numéro du menu parent désiré [0 à .....] dans mon cas le menu superviseur est le 2
    foreach (Site s in Gestion.GetInstance().GetListeSites())
    {
    MenuItem newSubMenuItem = new MenuItem(s.GetNom()); //donne un nom au sous-menu
    newSubMenuItem.NavigateUrl =@"~/Superviseur/Site.aspx?id=""" + s.GetId() + @"""";
    MenuSite.ChildItems.Add(newSubMenuItem); // ajout le sous menu au menu parent
    }
    }
    }

    je me disais que peut être 'en jouant' avec le Childitems et les Userinrole j'obtiendrai quelque chose. Je vais continuer à chercher.

  13. #13
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Salut,

    Absolument, c'est une solution.

    Dans le foreach, tu peux tester le rôle et ainsi déterminer si tu affiches ou pas le lien (si tu ajoutes ou non le childitem à la collection).

    bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sécurité] Empêcher l'accès aux pages
    Par benoitinfrance dans le forum Langage
    Réponses: 14
    Dernier message: 24/08/2006, 11h30
  2. [Sécurité] accés aux pages protégées
    Par amine_smi dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2006, 18h55
  3. [Pb Reseau et internet] Accés aux pages jaunes
    Par Fooshi dans le forum Administration
    Réponses: 3
    Dernier message: 06/12/2005, 16h48
  4. [TOMCAT] acces aux page jsp dans un autre repertoire
    Par yanagiba dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 16/08/2005, 06h48
  5. [Struts] Droits d'un user et gestion des accès aux pages
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/04/2004, 11h30

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