Justement non, le LEFT JOIN retourne tous les boutons certains avec leur Groupe et certain avec un NULL assimilé à un Zéro et pour cela il faut écrire une jointure de type LEFT JOIN
Si un bouton est absent de la table BUTTONS c'est qu'il n'est pas soumis aux droits donc implicitement actif, seul les boutons limités d'accès peuvent être mis dans BUTTONS mais pour une vision à long terme, autant tous les mettre, cela fonctionnera aussi bien, juste qu'il y aura plus de données dans les tables et il est donc impératif que Enabled soit affecté systématique à partir des tous les boutons de la table BUTTONS
D'ailleurs, le test peut être inversé, on sait que l'on interdit le NULL donc suffit de tester IsNull au lieu du AsLargeInt
Après la structure des tables n'est pas parfaite, je n'aurais pas mis le groupe dans la table USERS mais dans une table USER_GROUP lié par le GroupID à DROITS_BOUTON cela permet ainsi qu'un utilisateur puisse appartenir à plusieurs groupes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 variableButton:= TButton(FindComponent(FDQuery1.FieldByName('ButtonName').AsString)); if variableButton is TButton then variableButton.Enabled := not FDQuery1.FieldByName('ID_GROUPE').IsNull; FDQuery1.Next;
N'oublier pas ensuite l'écran d'administration des droits, il faut bien que l'admin puisse voir toutes les FORMS et tous les BUTTONS de l'application, leur nom mais aussi un commentaire
Cet écran d'administration lancé en mode développeur lui permettrait de déclarer de nouveau bouton (voir si l'on est courageux, un petit scan des DFM)
On pourrait prendre le partie inverse de lancer une requête pour vérifier chaque bouton mais évidemment, nous voyons tous la lourdeur à l'exécution
Partager