![]() |
Verschiedene Funktionen verschiedenen Benutzer zuweisen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte iin meinem Programm verschiedenen Benutzern verschiedene Rechte zuweisen. Die ganze Sache habe ich auch schon gelöst, allerdings so wie ich persönlich finden sehr kompliziert und vermutlich auch nicht nach dem Standart verfahren. Momentan speicher ich die verschiedenen Einstellungen(siehe Anhang 1) in einer Firebird DB als Integervariablen.
Delphi-Quellcode:
usw. Diesen Record schreibe ich dann in die DB. Finde ich persönlich auch noch ganz OK. Wäre die Frage ob das die Allgemeinheit auch so sieht.
function TBenutzerForm.SetRecord(ReadUser : TReadConfig):Boolean;
begin SetRecord := true; with ReadUser do begin BenutzerName := BenutzerEdit.Text; Passwort := PasswortEdit.Text; if VerbindenCheckBox.Checked = true then Verbinden := 1 else Verbinden := 0; if TrennenCheckBox.Checked = true then Trennen := 1 else Trennen := 0; Weiter geht es aber dann mit dem Programmstart. Dabei muss sind jetzt eigendlich alle Funktionen Enabled = false, da der USer sich erst mal Anmelden soll. Gibt er seine Daten ein, lade ich die Einstellungen momentan so...
Delphi-Quellcode:
usw. Hierbei setzte ich ja jetzt viele Komponenten auf berechtigt oder nicht. Gewisse Personen sollen Lesen können, andere wiederum nicht. Wieder andere sollen neu´Anlegen können oder überschreiben. Das führt dazu, das ich vielen Komponenten in meinem Programm ja dieses sagen muss. case FPasswort.ShowModal of mrOK: begin Anmelden1.Enabled := false; Abmelden.Enabled := true; UserRights.BenutzerName := FPasswort.BenutzerED.Text; DM_PS.ReadUserRights(UserRights); with UserRights do begin if Verbinden = 1 then BTVerbinden.Enabled := true else BTVerbinden.Enabled := false; case Zentralen of 0:AnlagenSetup1.Enabled := false; 1:begin AnlagenSetup1.Enabled := true; Hardware.Hardwareanbindung.RGZentralentyp.Enabled := false; Hardware.Hardwareanbindung.SpeichernButton.Enabled := false; Hardware.Hardwareanbindung.UebernehmenButton.Enabled := false; end; 2:begin AnlagenSetup1.Enabled := true; Hardware.Hardwareanbindung.RGZentralentyp.Enabled := false; Hardware.Hardwareanbindung.SpeichernButton.Enabled := false; Hardware.Hardwareanbindung.UebernehmenButton.Enabled := false; end; 3:begin AnlagenSetup1.Enabled := true; Hardware.Hardwareanbindung.RGZentralentyp.Enabled := true; Hardware.Hardwareanbindung.SpeichernButton.Enabled := true; Hardware.Hardwareanbindung.UebernehmenButton.Enabled := true; end; end; Kann man sowas nicht irgendwie beim Programmstart in der Komponenete selber vereinen . So in der Art, eine Eigenschaft der Komponente selbst. Soll heißen, Komponente sucht beim Start den integer Wert der im Record steht und setzt auf z.B. Visible = true oder false oder Enabled = true oder false. Ich hoffe ich konnte jettzt beschreiben was ich suche. Also danke schon mal und Gruß Jens |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Wie wäre es statt deinem zweiten Quelltext damit:
Delphi-Quellcode:
Zudem könnte das Setzen der Rechte eigentlich gleich automatisch beim Setzen der Property BenutzerName oder falls vorhanden Passwort passieren statt separat.
if FPasswort.ShowModal = mrOK then
begin Anmelden1.Enabled := false; Abmelden.Enabled := true; UserRights.BenutzerName := FPasswort.BenutzerED.Text; DM_PS.ReadUserRights(UserRights); BTVerbinden.Enabled := UserRights.Verbinden = 1; AnlagenSetup1.Enabled := UserRights.Zentralen > 0; Hardware.Hardwareanbindung.RGZentralentyp.Enabled := UserRights.Zentralen >= 3; Hardware.Hardwareanbindung.SpeichernButton.Enabled := UserRights.Zentralen >= 3; Hardware.Hardwareanbindung.UebernehmenButton.Enabled := UserRights.Zentralen >= 3; Was das Speichern angeht: Wozu der Record? Wenn es unter 30 Rechte oder so wären, reicht doch ein simpler Integerwert von 4 Byte mit gesetzten Bits aus, wenn es mehr sind, müsste halt noch einer her oder so. ;-) |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Hallo,
warum Integer und nicht Boolean ? Einen Record würde ich nicht nehmen. Klar ist am Anfang noch nicht abzusehen, wie viele Rechte es geben wird, aber besser man sorgt vor. Ich habe das so gelöst Tabelle: User Id Integer Name VarChar(x) (* Optional Tabelle: Rights Id Integer Name VarChar *) Tabelle: UserRights Id Integer ("Autoinc") UserId RightId Die Rechte sind durchnumeriert (Konstanten). Das hat 2 Vorteile: - Erweiterbar, neue Rechte bekommen einfach die nächsthöhere Nummer, ohne das an der DB rumgeschraubt werden muss - In UserRights stehen nur gesetzte Rechte, hat der User ein Recht nicht, steht nichts in der Tabelle Es werden damit nur die gesetzten Rechte geladen -> Performance Heiko |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Hallo und danke erstmal,
ich finde beide Ansätze sehr interesant. Zitat:
Zitat:
1. AUS (Menüpunkt ist nicht sichtbar) 2. EIN (Menüpunkt ist sichtbar aber nicht nutzbar) Soll die Möglichkeit schaffen, den Funktionsumpfang zun erkennen. 3. READ (Menüpunkt sichtbar, Menü oder Konfiguration kann geöffnet werden, aber es können keine Änderungen vorgenommen werden. 4. R/W (Alles frei. Lesen wie Schreiben) Zitat:
Schönen Abend noch Gruss Jens |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Hallo,
Zitat:
AUS nichts EIN bRight2Locked READ bRight2Read R/W bRight2Write Wären also 3 Rechte. Ohne das "Suchtbar, aber disabled) wären es 2. OK, mache ich das Recht als Integer, komme ich mit einem Feld aus (0-3). Das hätte ich wahrscheinlich dann auch so gemacht, wenn die Anforderung so ist. Ich würde aber trotzdem schon beim Select auf >0 prüfen. Warum ein Recht aus der DB laden, wenn eh 0 drinsteht. Spart Traffic. Heiko |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Zitat:
Danke nochmal Gruß Jens |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
So, ich habe das jetzt mal versucht zu realisieren, habe allerdings gerade ein Gedanken problem. Mein Problem ist, das der Momentan SQL Teil von mir wie folgt aus sieht. Aber wo kann ich da das >0 einbauen.
Delphi-Quellcode:
Danke schon mal
Qry_PSUserCreate.SQL.Text := 'SELECT * FROM BENUTZER WHERE BENUTZER_NAME =:Benutzer';
Qry_PSUserCreate.ParamByName('Benutzer').Value := UserRights.BenutzerName; Qry_PSUserCreate.Open; with UserRights do begin Verbinden := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_VERBINDEN').AsInteger; Trennen := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_TRENNEN').AsInteger; Beenden := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_BEENDEN').AsInteger; Drucken := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_DRUCKEN').AsInteger; ExportHTML := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_EXPORT_HTML').AsInteger; ExportPDF := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_EXPORT_PDF').AsInteger; DatenAuswert:= DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_DATENAUSWERTUNG').AsInteger; Schnittstellenpar := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_SCHNITTSTELLE').AsInteger; KomOptionen := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_KOM_OPTIONEN').AsInteger; EMailSetup := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_EMAIL_SETUP').AsInteger; Zentralen := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_ZENTRALEN').AsInteger; Ansichten:= DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_ANSICHT').AsInteger; Benutzerverwaltung := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_BENUTZER').AsInteger; EigeneRechte := DM_PS.Qry_PSUserCreate.FieldByName('BERECHTIGUNG_EIGENE_RECHTE').AsInteger; Abmelden := DM_PS.Qry_PSUserCreate.FieldByName('EINSTELLUNG_ABMELDEN').AsInteger; AnzahlDS := DM_PS.Qry_PSUserCreate.FieldByName('EINSTELLUNG_ANZAHL_DATENSAETZE').AsString; Zeit := TimeToStr(DM_PS.Qry_PSUserCreate.FieldByName('EINSTELLUNG_ZEIT').AsDateTime); end; end Gruß Jens |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Nein, das war anders gemeint. Du versuchst die Berechtigung zu finden, suchst also alle Einträge, deren Rechte-ID mit deiner aktuellen übereinstimmt. Ist die Anzahl der Ergebnisse größer als 0, dann ist die Berechtigung vorhanden.
Ich selbst würde aber wie gesagt lieber gleich einzelne Bits nehmen, das ist noch einfacher. |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Ja, aber wie kann ich mir das vorstellen.
Gruß Jens |
Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen
Was meinen Vorschlag angeht:
Delphi-Quellcode:
So kannst du die Bits einzeln benutzen und nur einen oder bei mehr Rechten mehrere Integerwerte benutzen.
const
USERRIGHT_CONNECT = 1; USERRIGHT_DISCONNECT = 2; USERRIGHT_CLOSE = 4; USERRIGHT_PRINT = 8; USERRIGHT_EXPORT_HTML = 16; USERRIGHT_EXPORT_PDF = 32; ... // Integerwert auf Recht prüfen: if UserRights and USERRIGHT_CONNECT > 0 then ... // Recht setzen: UserRights := UserRights or USERRIGHT_CONNECT; // Recht entfernen: UserRights := UserRights and not USERRIGHT_CONNECT; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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