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

Bases de données Delphi Discussion :

TActionList et Rôle Oracle


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut TActionList et Rôle Oracle
    Bonjour à tous,

    J'ai le désir d'activer ou de désactiver le menus de mon application en fonction des rôles que chaque utilisateur disposent.
    Les différents menus de mon application son déjà prêt. En faisant des recherches je crois que TActionList peux faire l'affaire.
    Je crois avoir un peu compris l'utilisation de ce composant.
    J'ai créer une table des roles, et dans cette table j'ai inséré chaque utilisateur avec ses rôles.
    J'ai déposé un ActionList1 sur ma form principal. Ensuite j'ai Ajouter une Action de ce nom : ORDRE_DE_MISSION. Dans l'évenement OnUpdate de ORDRE_DE_MISSION j'ai écrit ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm7.ORDRE_DE_MISSIONUpdate(Sender: TObject);
    Var USER : String;
    begin
      Query_Dual.sql.Clear;
      Query_Dual.Sql.Add('SELECT USER AS UTIL FROM DUAL');
      Query_Dual.Open;
      User := Query_Dual.fieldbyname('UTIL').AsString;
      Query_Role_Mission.sql.Clear;
      Query_Role_Mission.sql.Add('SELECT ME_ROLE FROM MENU_ROLES');
      Query_Role_Mission.sql.Add('WHERE ME_CODE = '+ QuotedStr(User));
      Query_Role_Mission.Open;
      if Query_Role_Mission.IsEmpty = True then
         //Désactiver le menu en question
    end;
    Si vous avez bien compris mon code, vous verrai que j'ai des problèmes pour activer ou désactiver les menus. Pouvez-vous me guider?.
    Merci pour toutes interventions.

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Sur ton item de menu tu as mis une action ?
    Oui
    Bien, il faut donc travailler avec celle-ci ,
    en fonction de ton besoin tu feras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       MonAction.visible   := Not Query_Role_Mission.IsEmpty;
    //  ou 
       MonAction.enabled := Not Query_Role_Mission.IsEmpty;
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    En complément des propos de Yurck, je n'effectuerais pas la requête s'assurant des droits du User dans le Update du TAction.
    Car celui-ci est susceptible d'être exécuté plusieurs.

    Exécute ta requête au moment de la connexion et renseigne une variable (FAdminUser dans mon exemple) à ce moment là.

    Ensuite ton code devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm7.ORDRE_DE_MISSIONUpdate(Sender: TObject);
    begin
      TAction(Sender).Enabled := FAdminUser; 
    end;
    Cette procédure Update peut-être commune à plusieurs actions.

    @+ Claudius

  4. #4
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Cl@udius veut dire que je dois exécuter ma requête dans le OnExécute du TAction?

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Non pas du tout ! Effectue ta requête au moment où ton User se connecte à la BDD. Celle-ci sera exécutée une fois pour toute.

    Dans le OnExecute doit être présent le code correspondant à ton MenuItem (ou TButton, etc...).

    @+ Claudius

  6. #6
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Si je comprend bien, je dois exécuter ma requête lors de la création de ma form principal?. J'utilise la BDE.

  7. #7
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Bonjour,

    Merci pour votre aide d'hier. Mais je demande encore des éclaircissements, je ne comprend pas vraiment.
    Merci de m'aider...

  8. #8
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    J'ai déposé un TDataBase sur ma form principal.
    J'ai écrit le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm7.Database1AfterConnect(Sender: TObject);
    VAR user : string;
    begin
      Query_Dual.sql.Clear;
      Query_Dual.Sql.Add('SELECT USER AS UTIL FROM DUAL');
      Query_Dual.Open;
      user := Query_Dual.fieldbyname('UTIL').AsString;
      showMessage(user);
      Query_Role_Mission.sql.Clear;
      Query_Role_Mission.sql.Add('SELECT ME_ROLE FROM MENU');
      Query_Role_Mission.sql.Add('WHERE ME_CODE = '+ QuotedStr(user));
      Query_Role_Mission.Open;
      if Query_Role_Mission.IsEmpty = True then FAdminUser := False;
    end;
    Mais je constate que la requête n'est pas exécuter.
    Est-ce que je suis sur la bonne voie?.

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    C'est également dans l'évènement AfterConnect que j'aurais mis le traitement.

    Citation Envoyé par sondo Voir le message
    Mais je constate que la requête n'est pas exécuter.
    La procédure AfterConnect est bien reliée à ton composant TDatabase ?

    PS: N'oublie pas de refermer ton Query_Role_Mission après utilisation.

  10. #10
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Salut,

    Merci d'avoir penser à moi.
    Je ne comprend pas quand vous dites
    La procédure AfterConnect est bien reliée à ton composant TDatabase ?
    La procédure AfterConnect est un évvènement de TDatabase.
    Dans la propriété Alias de la TDatabase j'ai précisé ma base de donnée.
    Ensuite voilà ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm7.ORDRE_DE_MISSIONUpdate(Sender: TObject);
    begin
      TAction(Sender).visible := FAdminUser;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm7.ORDRE_DE_MISSIONExecute(Sender: TObject);
    begin
      ORDRE_DE_MISSION.visible := FAdminUser;
    end;

  11. #11
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Je dis que la requête ne s'exécute pas parce qu' un utilisateur qui a le rôle 'ordre_de_mission' n'a pas le menu en question, car le menu est toujours invisible. c'est à dire que le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm7.ORDRE_DE_MISSIONExecute(Sender: TObject);
    begin
      ORDRE_DE_MISSION.visible := FAdminUser;
    end;
    est exécuter sans tenir compte de la requête.

  12. #12
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Remplace cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Query_Role_Mission.IsEmpty = True then FAdminUser := False;
    par celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FAdminUser := not Query_Role_Mission.IsEmpty;
    @+ Claudius

  13. #13
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Mon problème n'est pas encore résolu.
    Je précise que j'ai déclaré FAdminUser : Boolean comme variable public.

Discussions similaires

  1. rôles et privilèges pour utilisateur Oracle
    Par fh_arhs dans le forum Administration
    Réponses: 2
    Dernier message: 13/02/2009, 13h22
  2. rôles et privilèges sous oracle 9i
    Par nadia lydia dans le forum Oracle
    Réponses: 2
    Dernier message: 08/11/2005, 11h15
  3. [VB6] Connection ODBC Oracle
    Par babe dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/10/2002, 16h52
  4. [Kylix] sqlconnection + oracle
    Par tibo55555 dans le forum EDI
    Réponses: 1
    Dernier message: 02/09/2002, 09h09
  5. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18

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