Anzeige:
Ergebnis 1 bis 13 von 13

Thema: "Benutzerverwaltung" für PHP / Webapplikation

  1. #1
    Registrierter Benutzer
    Registriert seit
    10.04.2002
    Beiträge
    54

    "Benutzerverwaltung" für PHP / Webapplikation

    hallo,

    ich habe im moment eine webanwendung, bei der man sich einloggen kann.
    beim einloggen wird in einer datenbank die "benutzergruppe" abgefragt und als SESSION information gespeichert.

    nun gibt eine php-datei, die für die anzeige eines JAVA-Menüs zuständig ist.
    je nach benutzergruppe ist dieses menü unterschiedlich. diese datei wird im von allen php-dateien importiert, also egal wo sicher der user befindet -> immer gleiches menü.

    weiters wird beim aufruf jeder seite geprüft, ob ein benutzer mit dieser benutzergruppe lt. der SESSION informationen erlaubt ist auf diese seite zuzugreifen.


    also habe ich hier 2 schutzmechanismen für php-seiten zu dieser appikation:

    1) wird im menü nur angezeigt, auf welche seiten der user auch zugreifen darf (eigentlich ja kein wirklicher schutz, aber sicher positiv)
    2) falls der benutzer auf nicht erlaubte seiten trotzdem zugreifen will, kommt eine fehlermeldung.


    nun ist es so, dass diese appikation immer weiter wächst.
    ich muss immer jede seite einpflegen für das JAVA-Menü (das ist ja noch ok). aber trotzdem fehlt mit hier eine größere fexlibilität, z.b. ein benutzer aus gruppe "1" soll trotzdem auf seite XXX zugreifen können, auch wenn es die anderen in dieser gruppe nicht dürfen. das ist im moment nur möglich, wenn ich eine neue gruppe anlege, was wieder bedeuten würden, dass ich diese benutzergruppe in ALLEN seite hinzufügen müsste.


    hat jemand ideen/vorschläge, wie ich das flexibler und einfacher gestalten kann?
    danke

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    so als Schnellschuss: Warum legst Du die Seiten / Menüs und die Berechtigungen dafür nicht auch in der Datenbank ab?

    Jan

  3. #3
    Registrierter Benutzer
    Registriert seit
    10.04.2002
    Beiträge
    54
    ja, ich weiss, dass das wohl "zwingend" wird damit.
    die frage ist, wie designmässig am besten machen.

    ausserdem möchte ich für jeden welchsel von seite zu seite nicht die datenbank belasten...

    meine idee wäre:

    jede seite wird "durchnummeriert".

    wenn sich der user nun einloggt, wir passwd geprüft und dann die daten aus der "berechtigungstabelle" gelesen und in die php-session eingetragen.

    1) das menue setzte sich aus dieser tabelle zusammen
    2) wenn der user auf eine seite zugreifen will, wird geprüft, ob diese seite lt. der berechtungstabelle in seiner PHP-session erlaubt ist.

    ist das so vorstellbar? oder gibts es verbessungsvorschläge?

  4. #4
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von JAF Beitrag anzeigen
    JAVA-Menüs
    Du meinst vermutlich JavaScript (großer Unterschied).

    Zitat Zitat von JAF Beitrag anzeigen
    das ist im moment nur möglich, wenn ich eine neue gruppe anlege, was wieder bedeuten würden, dass ich diese benutzergruppe in ALLEN seite hinzufügen müsste.
    Die Benutzergruppen stehen im Quellcode jeder Seite?

    Zitat Zitat von JAF Beitrag anzeigen
    ausserdem möchte ich für jeden welchsel von seite zu seite nicht die datenbank belasten...
    [...]
    wenn sich der user nun einloggt, wir passwd geprüft und dann die daten aus der "berechtigungstabelle" gelesen und in die php-session eingetragen.
    Und wo ist die Berechtigungstabelle gespeichert?
    Mach dir keine Sorgen wegen dem lächerlichen Query und benutz die Datenbank. Speicher alle Benutzer, Gruppen, Menüpunkte und Zugriffsrechte in der DB - dafür ist sie da.
    Wenn du dabei alles richtig machst und trotzdem irgendwann Performance-Probleme hast, kannst du anfangen, nach Optimierungsmöglichkeiten zu suchen.

  5. #5
    Registrierter Benutzer
    Registriert seit
    10.04.2002
    Beiträge
    54
    Zitat Zitat von BLUESCREEN3D Beitrag anzeigen
    Du meinst vermutlich JavaScript (großer Unterschied).
    ja, sorry, JavaScript ist gemeint

    Die Benutzergruppen stehen im Quellcode jeder Seite?
    so ist es

    Und wo ist die Berechtigungstabelle gespeichert?
    es gibt jetzt noch keine "berechtigungtabelle". im moment gibt es nur usergruppen, diese wird an die session-informationen übergeben, sobald sich ein user einlogt. beim zugriff auf eine seite wird dann geprüft, ob DIESE usergruppe zugreifen darf. so ist es im moment.

    Mach dir keine Sorgen wegen dem lächerlichen Query und benutz die Datenbank. Speicher alle Benutzer, Gruppen, Menüpunkte und Zugriffsrechte in der DB - dafür ist sie da.
    Wenn du dabei alles richtig machst und trotzdem irgendwann Performance-Probleme hast, kannst du anfangen, nach Optimierungsmöglichkeiten zu suchen.
    nun, wie gesagt, ich will nicht immer beim zugriff auf jeder seite die datenbank abfragen müssen. darum denke ich, ist das laden der "berechtigungstabelle" in die session der bessere weg und dann beim zugriff auf einer seite wird geprüft, ob er lt. den session-parameten zugreifen darf.

    bei machen seiten wird im moment ja nicht mal die (mysql)datenbank benötigt.

    der einzige nachteil auf diese art natürlich: benutzer bekommt zusätzliche berechtigung -> d.h. neu einloggen, sonst gibts keinen zugriff.

  6. #6
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von JAF Beitrag anzeigen
    der einzige nachteil auf diese art natürlich: benutzer bekommt zusätzliche berechtigung -> d.h. neu einloggen, sonst gibts keinen zugriff.
    Du hast auch das umgekehrte Problem, wenn du die Sessions nicht zeitlich begrenzt: Berechtigung wird entzogen, Benutzer hat die Rechte aber noch in der Session.

  7. #7
    Registrierter Benutzer
    Registriert seit
    10.04.2002
    Beiträge
    54
    das ist schon klar.

    aber das "problem" habe ich immer.
    ausser wenn ich z.b. im link immer username & passwort mitgebe *g*

    auch mit ständiger prüfung (bei jeder seite) über die datenbank.
    denn der user soll ja auch nicht bei jeder seite seine benutzerdaten eingeben müssen

  8. #8
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Wenn du die Zugriffsrechte in der DB speicherst und in der Session nur die ID des Benutzers, dann hättest du immer die aktuellen Rechte zum Vergleichen und damit nicht dieses Problem.

  9. #9
    Registrierter Benutzer
    Registriert seit
    10.04.2002
    Beiträge
    54
    nein, das stimmt doch auch nicht, oder?

    denn "Session nur die ID des Benutzers": dann ist diese ID des benutzers genau weg, wenn die session ungültig wird...

  10. #10
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    hmm,

    mit der benutzerverwaltung mach ich es folgendermaßen:

    -in der DB habe ich je eine tabelle mit benutzern, benutzergruppen und modulen
    -ein benutzer kann beliebig vielen benutzergruppen zugeordnet sein
    -benutzergruppen haben entweder lesenden, schreibenden oder garkeinen zugriff auf module

    Module sind in meinen anwendugen manchmal menübäume, oder ganze funktionen oder aber auch nur einzelne aktionen, die ausgeführt werden können.

    Der benutzer wird bei mir ganz am Anfang des aufrufes identifiziert. Mit dieser Identifikation frage ich dann einfach die art der Berechtigung ab. zB.

    Code:
    if(getperm("KDJOIN")==WRITE) {
        .......
        }
    "KDJOIN" ist der eindeutige Code für irgendein modul...

    Mit einem kleinen Stück Frontend zur Verwaltung kann ich die Zugriffsrechte so beliebig fein verteilen...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  11. #11
    Registrierter Benutzer
    Registriert seit
    10.04.2002
    Beiträge
    54
    hi elrond,

    was macht dein getperm() im hintergrund?
    ruft es auch (ständig) die datenbank ab?

    wie realisierst du den login? auch via session ID etc?

  12. #12
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    getperm findet anhand der userid und des modulcodes die höchste vergebene berechtigung heraus. Das passiert in der db.

    Code:
    function getperm($modkey)	{
    $sql="select max(mga.permid) as permid from modul m,modgroupass mga, usergroupass uga where m.modid=mga.modid and mga.usergroupid=uga.usergroupid and m.modkey='".$modkey."' and uga.userid=".$GLOBALS['msess']->USERID;
    #echo $sql;
    $rs_arr=$GLOBALS['db']->select($sql);
    if(!$rs_arr)	{return 0;}
    else {return $rs_arr[0]["permid"];}
    }


    die identifikation des users erfolgt bei mir auch über die sessionid. dafür benutze ich eine eigene klasse deren globale instanz "msess" ich abfrage...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  13. #13
    Registrierter Benutzer
    Registriert seit
    10.04.2002
    Beiträge
    54
    danke für deine infos.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •