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

Langage SQL Discussion :

BD gestion des droits : Requête pour connaitre tous les droits / user


Sujet :

Langage SQL

  1. #1
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut BD gestion des droits : Requête pour connaitre tous les droits / user
    Bonsoir à toutes, tous,

    Je dois mettre en place une gestion des droits d'accès à nos applications, au début j'avais proposé l'Active Directory mais l'idée à été rejetée car celui-ci ne permet pas de garder un historique des employés ayant eu un droit dans le passé.
    Je suis donc en train d'essayer de faire la base de donnée.
    Voici ma première idée :


    Mais je bloque sur la requête me permettant de trouver tous les droits d'un utilisateur sur une application.

    J'arrive bien sur à lier les tables "user", "user / droit" et "droit" sans problème que se soit via "jointure" ou "exists".
    Mais là ou je bloque c'est au niveau de l'appartenance d'un user à un ou plusieurs groupe, ces groupes pouvant faire parties d'un ou plusieurs autre groupe...

    Merci de m'avoir lu et par conséquent de vouloir essayer de m'aider.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    il faudrait faire de la récursion... par contre il manque, je pense, le fait de savoir si un groupe est père ou fils (donc une table d'association entre groupe)

    http://sqlpro.developpez.com/cours/s...te-recursives/

    Là actuellement vous avez une dépendance cyclique entre vos groupes...
    du coup la récursion est difficilement applicable.

    Passez par le forum de modélisation pour peaufiner votre MCD !


    edit :
    Par exemple :
    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
     
    CREATE TABLE t_role_rol
    (
      rol_id integer not null,
      rol_desc character varying(1024),
      CONSTRAINT t_role_rol_pkey PRIMARY KEY (rol_id )
    );
     
     
    CREATE TABLE t_ass_role_aro
    (
      rol_id_pere integer NOT NULL,
      rol_id_fils integer NOT NULL,,
      CONSTRAINT t_ass_role_aro_pkey PRIMARY KEY (rol_id_pere , rol_id_fils ),
      CONSTRAINT t_ass_role_aro_check CHECK (rol_id_pere <> rol_id_fils));
    Il faudrait une autre contrainte check pour vérifier que l'on a pas un cas cyclique cad :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_pere    id_fils
    -----------------
    1            2
    2            1

    Suite à ça pour trouver les dépendances montante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    with recursive tmp (rol_id, rol_desc) as (
    select rol_id, rol_desc
    from t_role_rol
    where rol_id = 'X'
    union all 
    select c.rol_id, c.rol_desc
    from tmp a
    inner join t_ass_role_aro b on a.rol_id = b.rol_id_fils
    inner join t_role_rol c on b.rol_id_pere = c.rol_id)
     
     
    select * 
    from tmp

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Je ne connaissais pas les requêtes récursives, pas plus que les CTE obtenue via le mot clé WITH et je vois à quel point cela est puissant... (Bizarre et dommage que l'on aie pas appris cela au cour de base de donnée y'a quelques années d'ici )

    Demain je vais poster sur le forum de modélisation pour peaufiner mon model maintenant que je sais que cela est possible. (trop fatigué aujourd'hui)

    Un très grand merci pour ta réponse plein d'enseignement.

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

Discussions similaires

  1. [PHP 5.3] Gestion des erreurs/exceptions pour GD (en POO)
    Par RunCodePhp dans le forum Langage
    Réponses: 1
    Dernier message: 07/03/2011, 16h09
  2. Gestion des Exception WCF pour SilverLight
    Par OminiuS dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 16/09/2010, 11h36
  3. [AC-2003] Requête pour sortir tous les enregistrements modifés depuis une date
    Par piercleo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/01/2010, 15h08
  4. [AC-2003] Critère requête VraiFaux() pour sélectionner tous les enregistrements
    Par lio33 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/10/2009, 09h39

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