Komplexe Rechte

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Komplexe Rechte

    Hallo PHP-Gemeinde,
    ich habe ein - für mich - komplexes Problem.

    Ich möchte eine Mitarbeiterdatenbank erstellen, mit Userdaten, Urlaub, Schulungen, etc..

    1. Mitarbeiter können mehreren Teams zugehörig sein, oder Projektgruppen (gleichwertig mit Teams)
    2. Jeder Mitarbeiter darf seine Daten ändern (select * from userdaten where PeronalID = XX), klar
    3. Teamleiter dürfen Daten der Mitarbeiter ändern, die zu ihrem Team gehören, aber nicht die Daten anderer Mitarbeiter sehen.
    4. Der Abteilungsleiter darf die Daten aller Teams sehen und ändern, die ihm untergeordnet sind
    5. Der Bereichsleiter darf die Daten aller Abteilungen und somit aller Teams sehen und ändern.
    6. Die Anzahl der Teams soll variabel sein, da immer neue hinzukommen bzw. Projektgruppen geschlossen werden.

    Logischerweise ist dieses Rechtesystem eine Art Instanzenverwaltung. Die Ebene 1 hat alle anderen Ebnen unter sich, Ebne 2 nur ein paar Teams und die Teams selbst nur die Mitarbeiter.
    Wie kann ich diese Rechte erstellen ? Und wie kann ich es realisieren, dass die Anzahl der Teams variabel ist, die einem Abteilungsleiter zugeordnet sind ? Ich dachte schon daran, Tabellen für jedes Team zu erstellen, doch die Bezeichnung bzw. die Anzahl ist nicht bekannt, da sich diese ändern können.

    Und noch das Sahnehäubchen: Wie ordne ich Mitarbeiter mehreren Teams zu also bspw. 2 Teams. Hier können ja 2 Teamleiter die Daten ändern.

    Verwirrend was ? Ich hab jetzt schon das 3. PHP Buch durch und keine Antwort auf die Verwaltung socher Rechte-Instanzen gefunden, die auch noch variabel ist. Liegt die Lösung in PHP oder Mysql-User ?

    DANKE für jeden kleinen Denkanstoß !!!!

    Theseus

  • #2
    hmm

    ist natürlich schon recht komplex, deine komplexen Rechte ei wasn joke!

    tja, was du brauchst ist eine Datenbankbasierende Userverwaltung, die mit Tabellen und Lookup-Tabellen arbeitet. Anfangen mußt du natürlich ganz unten und dich dann die Hierarchie hocharbeiten, wobei weiter oben dann wohl auf Mehrfachverzweigungen auftreten können.

    Schritt 1: User-Tabelle für alle mit den Stammdaten
    Schritt 2: Team-Tabelle mit Stammdaten und falls nur einer Abteilung zugehörig auch Verknüpfung mit Abteilungstabelle
    Schritt 3: wie bei 1. und 2. vorgehen für Abteilungstabelle und Bereichstabelle
    Schritt 4: jetzt kommt die multiple Verknüpfung: fangen wir mal unten an -> Userlookup-Tabelle: Tabelle, die die UserID und die zugehörige TeamID speichert, also wenn User in drei Teams, dann hat er in der Userlookup-Tabelle auch drei Datensätze. Und so kannst du das auch für alle anderen Instanzen machen (meine, wenn ein Team in mehreren Abteilung ist, dann eben Teamlookup-Tabelle mit TeamID und AbtID usw.).
    Schritt 5: Hierarchie nach oben brechen, d.h. du mußt jedem User darüberhinaus auch noch eine Hierarchie-Recht zuordnen, d.h. du mußt wissen, ob ein User "nur" Mitarbeiter ist oder Bereichsleiter.

    Okay, das ist ja "nur" die Abbildung in der Datenbank. Kniffelig wird dann auch die Steuerung der Rechte und Auslesen der Daten nach angepasster Berechtigung des User.

    okay, das sollte erstmal genügen als Anstoss, oder?!
    Zuletzt geändert von BrainBug; 12.04.2002, 08:46.

    Kommentar


    • #3
      Ok,
      nur der Teamleiter in einem Team darf Daten ändern. Also muß ich anhand des Usernamens prüfen, ob er W-Recht hat.

      Aber wie stelle ich die Inhalte dar, wenn ein User mehreren Teams angehört ?

      I think so:

      Ich mache einen Select auf die Teamtabelle. Sagen wir mal, der User kommt drei mal vor. Dann mache ich eine Schleife, die einen Link zur Teamseite ausgibt, bis keine Zeile mehr da ist.
      Den Link zur Teamseite setzte ich in die Tabelle hinzu.

      Der User ruft also eine Teamseite auf. Jetzt muß ich nur noch prüfen, ob er für dieses Team auch W-Recht hat oder ?

      Der Abteilungsleiter gehört allen Teams an und hat in jedem w-Recht, der Teamleiter gehört einem Team an und hat w-Recht und der Mitarbeiter kann mehreren Teams angehören, hat aber kein w-Recht, sieht also per select und Ausgabe nur seine Daten.

      Somit habe ich zwar keine Instanzen, aber keine starre Hirachie, da alle Rechte auf einer Ebne sind.

      Sehe ich da was falsch ?

      Merci
      theseus

      PS: Sorry für diese blöden Fagen, aber ich mach jetzt schon Wochen rum und stecke irgendwie fest.

      Kommentar


      • #4
        Dann haben wir 'ne n:n - Beziehung und müssen mit 'ner 'Zwischentabelle' arbeiten:

        Tabelle: benutzer
        bid INT
        bname VARCHAR(20)

        Tabelle: teams
        tid INT
        tname VARCHAR(20)

        Zwischentabelle: teambenutzer
        tid INT
        bid INT

        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          @theseus: ja, so kannst du vorgehen, allerdings solltest du bedenken, das du vielleicht nicht nur eine lineare Hierarchie hast, d.h. ein Mitarbeiter ist in einem oder mehreren Teams, aber ein Teamleiter ist ja letztendlich auch ein Mitarbeiter -> oder gehört der dann da nirgends rein und ist wirklich nur Betreiber und nicht Empfänger. Naja, ich weiß ja nicht genau, was du da machst, war nur so als Hinweis gedacht. Rein theoretisch kannst du das so aufbauen, daß ein User sowohl Mitarbeiter in Teams ist, als auch Teamleiter oder ein User ist mehrfach Teamleiter und gleichzeitig aber auch Abteilungsleiter. Wie hier goth eingeworfen hat und ich ja schon mit der "Lookup"-Tabelle gemeint habe, kannst du alles ziemlich ausweiten.
          Aber wenn ein User sich anmeldet -> erstmal User-Daten (v.a. ID) holen -> dann Select über Team-Lookup -> Resultset mit vier Zeilen = User ist in vier Teams -> Darstellung dementsprechend ausgeben

          Kommentar

          Lädt...
          X