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 :

Limiter l'accès aux pages dynamiquement


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut Limiter l'accès aux pages dynamiquement
    Bonjour,

    J'ai créé un site en MVC3. J'ai réussi à mettre en place l'espace membre.
    Tout fonctionne très bien, je peux limiter l'accès de certaines pages à certains membres.

    Ce que j'aimerais c'est pouvoir modifier les droits d'accès à chaque page depuis une partie "Admin", où je pourrais choisir quel type de personne ont le droit d'accéder au différentes page du site.

    Le problème c'est qu'il faut utiliser ceci au dessus de chaque controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Authorize(Roles = "Admin")]
    public ActionResult Index()
    {
        ...
    }
    Ici, seul les membres ayant pour role "Admin" ont accès à l'index.

    J'ai déjà essayé de mettre une variable à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    static string test = "Admin";
    [Authorize(Roles = test)]
    public ActionResult Index()
    {
        ...
    }
    Mais j'ai ce message d'erreur :
    Erreur 3 Un argument d'attribut doit être une expression constante, une expression typeof ou une expression de création de tableau d'un type de paramètre d'attribut ...
    Il faut que la variable soit constante (j'ai testé, si on déclare un string constant, ça marche).

    Donc, comment je pourrais faire définir les roles de manière dynamique ??

    Sachant que les roles sont dans une BDD et que les règles pour chaque page seront aussi stockés dans une BDD (le nom du controller, le role associé).

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 42
    Par défaut
    Bonjour,

    Tu peux t'inspirer de ce lien : Dynamic Controller/Action authorization et du projet CodePlex associé : MVC Authorization.

    L'idée est de se baser sur un fichier ".config" pour définir les rôles ayant accès à un controlleur/action.

    Il ne te resterait plus qu'à coder la partie BackOffice pour mettre à jour ce fichier.

    En espérant t'avoir aidé,

    Cordialement

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    Merci pour ta réponse.

    Le seul problème, c'est qu'au final, j'ai le meme probleme.
    Ce que je veux pas, c'est que les informations concernant les droits soit stockes en dure.

    Je crois que je me suis mal explique.
    Actuellement, les roles sont stockes dans une table Roles dans la BDD.
    Voici a quoi elle ressemble :
    Id | Name
    1 | Admin
    2 | Membre
    .......
    Ce que j'aimerais, c'est pouvoir definir les droits d'acces pour chaque page dans une autre table :
    id | Page | Id_role
    1 | Index dans HomeController | 1, 2
    ...
    (c'est pas la forme definitive, c'est juste un exemple)


    Et donc, quand j'arriverais sur la page Index qui est dans Home, il y aura une fonction (ou n'importe quoi d'autre) qui regardera dans la BDD pour savoir quel role appliquer pour l'Index.

    Si on regarde l'exemple, cela donnerais ceci : Les Admin et les Membres ont le droit d'acceder a la page.


    Voila pourquoi j'aimerais savoir comment envoyer des variables a Authorize au lieu de lui envoyer des valeurs constantes.

    Si jamais c'est impossible, j'utiliserais ta solution (qui simplifie la vie quand meme ^^).


    (desole pour les accents mais j'arrive plus a ecrire en azerty depuis que je suis passe au qwerty)

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 42
    Par défaut
    Tu peux utiliser ton propre et surcharger la méthode Un exemple pour commencer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            // Récupère tes droits en base
        }
    }

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    Merci pour ta reponse.

    Par contre, je ne comprends pas comment je vais modifier la valeur de "Roles" depuis le "OnAuthorization".
    Recuperer les infos dans la BDD, c'est pas un pb.

    Et aussi, au niveau de l'appel, ca va se passer comment ?
    Normalement, il faut mettre [Authorize(Roles = "Admin")].
    Mais la je devrais juste mettre ceci : [CustomAuthorize] ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 42
    Par défaut
    Citation Envoyé par lludol Voir le message
    Merci pour ta reponse.
    Mais la je devrais juste mettre ceci : [CustomAuthorize] ?
    Tout à fait, d'ailleurs je me suis trompé la méthode qui convient le mieux pour toi est la suivante : Tu peux essayer quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var monControlleur = httpContext.Request.RequestContext.RouteData.Values["controller"];
            var monAction = httpContext.Request.RequestContext.RouteData.Values["action"];
     
            // Récupère la chaine contenant tes rôles depuis ta BDD
            Roles = "Role1,Role2,Role3"; // i.e.  GetRolesFromDatabase(monControlleur, monAction);
     
            return base.AuthorizeCore(httpContext);
        }
    }

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

Discussions similaires

  1. acces aux pages limitées à x jours
    Par GRAPHIXX dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2007, 13h07
  2. [Pb Reseau et internet] Accés aux pages jaunes
    Par Fooshi dans le forum Administration
    Réponses: 3
    Dernier message: 06/12/2005, 16h48
  3. accés aux champs dynamiques ?
    Par bassim dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/11/2005, 20h58
  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