Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Benutzerrechte für ein Programm verwenden (https://www.delphipraxis.net/119428-benutzerrechte-fuer-ein-programm-verwenden.html)

Ykcim 26. Aug 2008 12:55

Datenbank: MySQL • Version: 5 • Zugriff über: Komponenten von Delphi

Benutzerrechte für ein Programm verwenden
 
Hallo Zusammen,

ich möchte ein Programm schreiben, mit dem mehrere Benutzer aus unterschiedlichen Abteilungen arbeiten sollen. Damit verbunden ist, dass nicht jeder Benutzer alles sehen soll und auch manche Programmbereiche garnicht nutzen soll.

Ich hatte mal eine LogIn Möglichkeit gebastelt, in der Benutzer, Passwort und ABteilung aus der MySQL Datenbank abgefragt werden und dann mit visible:= true / false Buttons und andere Komponenten mit Delphi sichtbar bzw. unsichtbar gemacht.

Aber das war ziemlich gestrickt und wäre auch bei steigender Komplexität der Software kaum mehr durchführbar...

Ich würde gerne Benutzerrechte in der Benutzerverwaltung meines Programms vom Admin zuteilen können, die dann in der MySQL Datenbank hinterlegt werden. Und auf Basis dieser Informationen, die beim Anmelden mit gesendet werden müssen entschieden, was im Menü und den anderen Forms angezeigt wird oder nicht.

Aber wahrscheinlich gibt es eine wesentlich einfachere und elegantere Möglichkeit, deshalb bin ich an Anregungen sehr interessiert.

Vielen Dank schon mal im Voraus

Ykcim

spaxxn 26. Aug 2008 13:11

Re: Benutzerrechte für ein Programm verwenden
 
Wenn du spezifisch mit Berechtigungen arbeiten möchtest, die du/ein Admin individuell verteilst/verteilt, wird dir nicht viel anderes übrig bleiben, als dir das auf deine Bedürfnisse hin selbst zu bauen.

Würde mit Rechtemasken und Programm-ID's arbeiten. In der Kombination, kannst du das dann auch in weiteren Anwendungen wiederverwenden.

angos 26. Aug 2008 13:19

Re: Benutzerrechte für ein Programm verwenden
 
was sind Rechtemasken?

DeddyH 26. Aug 2008 13:26

Re: Benutzerrechte für ein Programm verwenden
 
Ich nehme an, er meint Bitmasken für die Rechte.

spaxxn 26. Aug 2008 13:28

Re: Benutzerrechte für ein Programm verwenden
 
Ein kleines Beispiel:

Wir haben folgende Tabelle(nur kurz gehalten):

UID UserID Mask ProgID Right
1 1 Buttons 1 1
2 2 Buttons 1 0
3 1 Forms 1 1
4 2 Forms 1 1


Benutzer 1 dürfte in Programm 1 alle Forms und alle Buttons sehen.
Benutzer 2 dürfte in Programm 1 alle Forms, aber keine Buttons sehen.

Das kann man beliebig runterbrechen. Bestimmten Buttons oder bestimmten Gruppen von Buttons bestimmte Berechtigungen geben z.B.

Ist nicht einmal viel Aufwand.

Ykcim 26. Aug 2008 13:31

Re: Benutzerrechte für ein Programm verwenden
 
Und was meinst Du mit Programm IDs?

spaxxn 26. Aug 2008 13:33

Re: Benutzerrechte für ein Programm verwenden
 
Die Frage ist jetzt nicht ernst gemeint oder?

Du vergibst deinen Proggis halt ID's...

MyProg1 -> erhält die ID=1
MyProg2 -> erhält die ID=2

Die Prog-ID's werden im Quellcode festgelegt.

taaktaak 26. Aug 2008 13:35

Re: Benutzerrechte für ein Programm verwenden
 
Vielleicht mal bei SAP 'reinschauen, die haben sich da ja sehr viele Gedanken gemacht. :warn:
Mein persönlicher Eindruck: In der Theorie definierte Rechtezuweisungen sind für die Praxis in den meisten Fällen viel zu kompliziert. Im Arbeitsalltag genügen i.d.R. recht einfache Gruppierung.

Ykcim 26. Aug 2008 13:35

Re: Benutzerrechte für ein Programm verwenden
 
Sorry, ich hatte die Frage genau in dem Moment gestellt, als Deine Antwort kam!

Vielen Dank
Ykcim

Ykcim 26. Aug 2008 13:37

Re: Benutzerrechte für ein Programm verwenden
 
Hallo spaxxn,

ich bin auf diesem Gebiet echt ein Newby. Hast Du für die Vergabe und Verwendung von ProgrammIDs einen ganz kleines CodeBeispiel, an dem ich es nachvollziehen kann?

Ich arbeiten mit einem Projekt und mehreren Forms

Vielen Dank für die Geduld

Ykcim

spaxxn 26. Aug 2008 13:50

Re: Benutzerrechte für ein Programm verwenden
 
Kannst du denn mit Datenbankabfragen umgehen?
Delphi-Quellcode:
ProgID := 1; //globale Variable, damit du von allen Forms aus darauf zugreifen kannst.

function getSecuLevel(AProgID,AUserID:integer;AMask:string):integer;
begin
  if qry.active then
    qry.close;
  qry.sql.text := 'SELECT Right FROM USERRIGHTS WHERE ProgID=:ProgID AND UserID=:UserID AND Mask=:Mask';
  qry.ParamByName('ProgID').AsInteger := AProgID;
  qry.ParamByName('UserID').AsInteger := AUserID;
  qry.ParamByName('Mask').AsString := AMask;
  qry.Open;
  if qry.RecordCount = 1 then // Sollte 1 sein, wenn die Primärschlüssel richtig sind
    Result := qry.FieldByName('Right').AsInteger;
  qry.Close;
end;
Nun kannst du folgendes machen:
Delphi-Quellcode:
  MyButtonRight := getSecuLeveL(ProgID,1,'Buttons');
Ist nur aus dem Kopf. Die Benutzer werden natürlich in einer separaten Tabelle verwaltet und von dort müsstest du dann auch die ID des Benutzers bekommen.

DeddyH 26. Aug 2008 14:00

Re: Benutzerrechte für ein Programm verwenden
 
Mal ein etwas anderer Denkansatz:
- zunächst werden Konstanten für einzelne Rechte vergeben (Lesen = 1, Bearbeiten = 2, Neuanlage = 4, Löschen = 8 etc.)
- dann werden Benutzergruppen (Rollen) definiert
- nun wird festgelegt, welche Rolle welche Rechte auf welche Tabelle bekommen soll
- die Benutzer werden nun einer oder mehreren Rollen zugewiesen
- die effektiven Rechte eines Benutzers ergeben sich dann durch "verodern" der Rollenrechte

Ykcim 26. Aug 2008 14:04

Re: Benutzerrechte für ein Programm verwenden
 
Hi spaxxn,

ich habe mir Delphi weitestgehend selbst beigebracht und auch schon ein größeres Programm mit sehr unterschiedlichen Features in Kombination mit SQL-Abfragen geschrieben. Aber das ist auch schon alles. Mit sql-Anweisungen Daten holen bzw. editieren bekomme ich hin, aber mit der Vergabe von Rechten und ProgrammIDs habe ich halt keine Ahnung. Deshalb bin ich um jeden Tip dankbar.

Ich werde versuchen, Deinen Code nachzuvollziehen.
Vielen Dank dafür

Ykcim

spaxxn 26. Aug 2008 14:10

Re: Benutzerrechte für ein Programm verwenden
 
Wenn du das kapiert hast, dann kannst du das Ganze noch erweitern.

Z.B. um die Punkte die DeddyH angesprochen hat.

Das was ich dir da aufgezeigt habe, ist die minimalste Variante in dieser Richtung.


@DeddyH: Dein Denkansatz ist erweitert :D nicht anders...

DeddyH 26. Aug 2008 14:11

Re: Benutzerrechte für ein Programm verwenden
 
OK, das sah mir so aus, als gingest Du über die VCL-Objekte und ich über die Tabellen, daher "anders" :zwinker:

Ykcim 26. Aug 2008 14:18

Re: Benutzerrechte für ein Programm verwenden
 
Sag mal spaxxn, vergibst Du für jedes Form eine ProgID?

spaxxn 26. Aug 2008 14:24

Re: Benutzerrechte für ein Programm verwenden
 
Nein, die ist für jedes Programm als ganzes einmalig.

In der Spalte Mask würde man Rechte für Formulare und Buttons vergeben. Du kannst auch Rechte für Datensätze in der Datenbank vergeben, wenn dir danach ist.

angos 26. Aug 2008 14:41

Re: Benutzerrechte für ein Programm verwenden
 
Noch eine Idee,

wenn man alle Aktionen (Buttons klicken, Forms öffnen usw.) über das verwaltet, was dafür gedacht ist, nämlich die Actions, dann

braucht man die Benutzerrechte nur der jeweiligen Actions zuzuordnen.

Dadurch könnte sich das Programmieren der Rechteverwaltung ein wenig einfacher gestalten.

[edit: umformuliert/]

Ackerjan 26. Aug 2008 16:57

Re: Benutzerrechte für ein Programm verwenden
 
Zitat:

Zitat von spaxxn
Wenn du das kapiert hast, dann kannst du das Ganze noch erweitern.
Z.B. um die Punkte die DeddyH angesprochen hat.

Und dann wird verraten, warum man für die Rechte (Lesen = 1, Bearbeiten = 2, Neuanlage = 4, Löschen = 8 etc.) gut Zweierpotenzen nehmen kann :cyclops:!.

Will man z.B. sagen:
- für User mit den Rechten 1,4,16 ist die Componente sichtbar/aktiv machen, so kann man hier z.B. im Tag die Summe 21 eintragen und weiß alle Rechte. Wer nicht weiß warum schreibt die Zahl mal als Binärcode auf.

Viel Erfolg.

DeddyH 26. Aug 2008 17:17

Re: Benutzerrechte für ein Programm verwenden
 
Oder man liest hier nach.

x000x 26. Aug 2008 17:19

Re: Benutzerrechte für ein Programm verwenden
 
Schau dir doch mal die Komponenten aus TMS Security System an.
Man spart sich damit eine Menge arbeit...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz