salut
j’ai la base de données suivante qui contient deux tables: (GROUPES,USERS) pour gérer les droits des groupes :
Script:
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
19
20
21
22
23
24
25
26
 
CREATE TABLE GROUPES (
  ID_GROUPE         SMALLINT NOT NULL,
  DESCRIPTION       VARCHAR(30) NOT NULL,
  DROITS_Button1    SMALLINT ,
  DROITS_BUTTON2    SMALLINT,
  /* Keys */
  CONSTRAINT PK_GROUPE
    PRIMARY KEY (ID_GROUPE)
);
 
CREATE TABLE USERS (
  ID_USER     SMALLINT NOT NULL,
  NOM         VARCHAR(30) NOT NULL,
  MotPass    VARCHAR(30),
  ID_GROUPE   SMALLINT,
  /* Keys */
  CONSTRAINT PK_USERS
    PRIMARY KEY (ID_USER),
  /* Foreign keys */
  CONSTRAINT FK_USER_GROUPES
    FOREIGN KEY (ID_GROUPE)
    REFERENCES GROUPES(ID_GROUPE)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);
Insertion des enregistrements
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
INSERT INTO GROUPE_PRV (ID_GROUPE, DESCRIPTION, DROITS_Button1, DROITS_BUTTON2) VALUES (1, 'administrateur', 1,1);
INSERT INTO GROUPE_PRV (ID_GROUPE, DESCRIPTION, DROITS_Button1, DROITS_BUTTON2) VALUES (2, 'superviseur', 0,1);
INSERT INTO GROUPE_PRV (ID_GROUPE, DESCRIPTION, DROITS_Button1, DROITS_BUTTON2) VALUES (3, 'Staff', 1,0);
COMMIT;
 
INSERT INTO USERS (ID_USER, NOM, MotPass, ID_GROUPE) VALUES (1, 'admin', 'test', 1);
INSERT INTO USERS (ID_USER, NOM, MotPass, ID_GROUPE) VALUES (1, 'David', '123456', 2);
INSERT INTO USERS (ID_USER, NOM, MotPass, ID_GROUPE) VALUES (1, 'Devloper', '1234', 3);
COMMIT;
dans la form1 j'ai deux boutons (Button1,Button1=2)

pour donner à chaque groupe une droit pour chaque bouton Nous écrivons l'un des deux nombres dans les deux champs (DROITS_Button1, DROITS_BUTTON2)
le numéro 0 veut dire que Le groupe n'a pas d'autorisation, ce qui signifie que le bouton est désactivé
le numéro 1 veut dire que Le groupe a l'autorisation, ce qui signifie que le bouton est Activé


pour charge les droit d'un 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
19
20
 
procedure TForm1.FormCreate(Sender: TObject);
begin
             with FDQuery1 do
              begin
              Close;
              SQL.Clear;
              SQL.Add('SELECT DROITS_Button1,DROITS_Button2 FROM GROUPES');
              SQL.Add(' WHERE DESCRIPTION=:ParmDESCRIPTION');
              ParamByName('ParmDESCRIPTION').value:=FormAuthentification.EditUserName.Text;
              Open;
              end;
 
  if DataModule1.FDQuery1.FieldByName('DROITS_Button1').asInteger=0 then  Button1.Enabled:=False
  else Button1.Enabled:=True          
 
  if DataModule1.FDQuery1.FieldByName('DROITS_Button2').asInteger=0 then
             Button2.Enabled:=False
             else Button2.Enabled:=True
end;

-C'est l'idée avec laquelle je travaille pour les droit des forms

-Supposons que j'ai 8 forms dans chaque form, il y a 10 boutons
Cela signifie que j'ajouterai 80 champs dans le table GROUPES (DROIT_button1....DROIT_button80) Pour moi c'est trop De plus, Firebird a un nombre maximum de champs autorisés dans chaque table

Mes questions sont:
1-Est-ce une bonne méthode et qu'en pensez-vous.
2-y a-t-il une meilleure méthode?