AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verschiedene Funktionen verschiedenen Benutzer zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Verschiedene Funktionen verschiedenen Benutzer zuweisen

Ein Thema von Jens Hartmann · begonnen am 8. Sep 2009 · letzter Beitrag vom 11. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 8. Sep 2009, 06:41
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:
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;
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.


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:

  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;
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.

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
Miniaturansicht angehängter Grafiken
benutzer_186.gif  
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 8. Sep 2009, 07:08
Wie wäre es statt deinem zweiten Quelltext damit:
Delphi-Quellcode:
  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;
Zudem könnte das Setzen der Rechte eigentlich gleich automatisch beim Setzen der Property BenutzerName oder falls vorhanden Passwort passieren statt separat.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 8. Sep 2009, 07:49
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 8. Sep 2009, 22:39
Hallo und danke erstmal,

ich finde beide Ansätze sehr interesant.

Zitat von jaenicke:
Hardware.Hardwareanbindung.RGZentralentyp.Enabled := UserRights.Zentralen >= 3;
Das das so geht, wusste ich bis jetzt nicht. Werde ich aber aufjedenfall in Zukunft bestimmt mal nutzen.

Zitat von hoika:
warum Integer und nicht Boolean
Integer, da meine RadioGroup´s ja mehr Werte haben könnten als nur 1 und 0. Liegt ja daran, das ich für gewisse Menüpunkte z.B. 4 verschiedene Rechter habe.

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 von hoika:
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
Aber wie machst Du dann die Zuweisung. Hast Du in der Entwicklungsumgebung alles Enabled = false und Visible = false und setzt nur die Komponenten deren Nummer vorhanden ist auf Enabled oder Visible.

Schönen Abend noch

Gruss Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 9. Sep 2009, 08:06
Hallo,

Zitat:
Aber wie machst Du dann die Zuweisung. Hast Du in der Entwicklungsumgebung alles Enabled = false und Visible = false und setzt nur die Komponenten deren Nummer vorhanden ist auf Enabled oder
Etwa so.


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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 9. Sep 2009, 22:53
Zitat von hoika:
Ich würde aber trotzdem schon beim
Select auf >0 prüfen.
Das leuchtet mir ein. Ich werde das in den nächsten Tag mal nacharbeiten und dann mal hier vorstellen.

Danke nochmal Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 10. Sep 2009, 21:10
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:
  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
Danke schon mal

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 10. Sep 2009, 21:59
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 10. Sep 2009, 23:04
Ja, aber wie kann ich mir das vorstellen.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Verschiedene Funktionen verschiedenen Benutzer zuweisen

  Alt 10. Sep 2009, 23:40
Was meinen Vorschlag angeht:
Delphi-Quellcode:
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;
So kannst du die Bits einzeln benutzen und nur einen oder bei mehr Rechten mehrere Integerwerte benutzen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 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