![]() |
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 |
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. |
Re: Benutzerrechte für ein Programm verwenden
was sind Rechtemasken?
|
Re: Benutzerrechte für ein Programm verwenden
Ich nehme an, er meint Bitmasken für die Rechte.
|
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. |
Re: Benutzerrechte für ein Programm verwenden
Und was meinst Du mit Programm IDs?
|
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. |
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. |
Re: Benutzerrechte für ein Programm verwenden
Sorry, ich hatte die Frage genau in dem Moment gestellt, als Deine Antwort kam!
Vielen Dank Ykcim |
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 |
Re: Benutzerrechte für ein Programm verwenden
Kannst du denn mit Datenbankabfragen umgehen?
Delphi-Quellcode:
Nun kannst du folgendes machen:
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;
Delphi-Quellcode:
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.
MyButtonRight := getSecuLeveL(ProgID,1,'Buttons');
|
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 |
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 |
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... |
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:
|
Re: Benutzerrechte für ein Programm verwenden
Sag mal spaxxn, vergibst Du für jedes Form eine ProgID?
|
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. |
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/] |
Re: Benutzerrechte für ein Programm verwenden
Zitat:
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. |
Re: Benutzerrechte für ein Programm verwenden
Oder man liest
![]() |
Re: Benutzerrechte für ein Programm verwenden
Schau dir doch mal die Komponenten aus
![]() Man spart sich damit eine Menge arbeit... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz