php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.08.2006, 17:33  
Benutzer
 
Registriert seit: 23.08.2006
Beiträge: 86
Canni
Standard Berechtigungen in Userverwaltung???

Hi.
Vielleicht kann mir jemand helfen?
Ich würde gerne eine Benutzerverwaltung mit unterschiedlichen Berechtigung auf diverse Bereiche meiner page basteln. Die UServerwaltung ist kein Problem - aber ich hab keine Idee wie ich die Sache mit den Berechtigungen angehen soll, also der Besucher darf oder darf nicht, oder darf nur lesen oder auch schreiben oder bestimmte Formulare aufrufen etc...
thx schon mal...
Canni ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.08.2006, 18:07  
Gast
 
Beiträge: n/a
Standard

Setze in der Seite eine Sessionvariable , z.B. $_SESSION['ebene'] = 5;

und in der User-DB eine Spalte Ebene INT 9

und schon kann in einer Seite der Ebene 5 nur ein User mit "Sicherheitsstufe" 5 (oder höher, wenn du das so machst)

editieren

if ($_SESSION['userebene'] < $_SESSION['ebene']) exit;

kommt das in die Richtung?
 
Alt 24.08.2006, 18:35  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard Re: Berechtigungen in Userverwaltung???

Zitat:
Zitat von Canni
Ich würde gerne eine Benutzerverwaltung mit unterschiedlichen Berechtigung auf diverse Bereiche meiner page basteln. Die UServerwaltung ist kein Problem - aber ich hab keine Idee wie ich die Sache mit den Berechtigungen angehen soll
Das ist keine Frage, die man pauschal beantworten könnte und in der es Sinn machen würde, dir Vorschläge zur Implementierung zu machen. Setz dich erstmal hin und krieg klar, was genau deine Anforderungen sind.

Reicht ein einfaches "Stufenkonzept", wie von "Catweazle" vorgeschlagen, oder lassen sich die Berechtigungen nicht so einfach strukturieren?

Was für Objekte und Aktionen gibt es, die einer Berechtigung bedürfen? Einzelne Seiten? Seitentypen? Site-Bereiche? Seiten-Elemente? Geht es nur um die Standard-Seiten-Operationen (anzeigen, anlegen, bearbeiten (Inhalte, verschieben, umbenennen, Rechte vergeben), löschen) bzw. reicht es z.B., die Objekte mit Schreib- und Leserechten auszustatten?

Wer besitzt Rechte? Benutzer, Gruppen oder vielleicht eher Rollen? Oder Rollen in bestimmten Gruppen?

Die Oerationen kannst du ja einfach mal aus dem Pflichtenheft rauskopieren und dahinterschreiben, wer diese ausführen darf. Zum Beispel:

Seite löschen:
Nur Besitzer der Seite, Redateure im zugeordeten Bereich und Admins

Neue Seite anlegen:
- Seitentypen:
-- News-Seite: nur Admins
-- Artikel: Autoren, aber nur in ihrem Bereich

etc.

Den Part kann die niemand abnehmen.

Bei dem konkreten Vorschlag mit der Speicherung in der Session ist zu bedenken, dass du so einem eingeloggten Benutzer seine Rechte nicht während seiner Sitzung entziehen kannst. Und das INT 9 ist natürlich Käse aber auch Wurscht.

Basti
Basti ist offline  
Alt 24.08.2006, 19:44  
Benutzer
 
Registriert seit: 23.08.2006
Beiträge: 86
Canni
Standard

Thx erst mal für die schnellen beiträge und für die Denkanstöße .

Ich hatte mir das so vorgestellt, daß ich meine Page in verschiedene Service bzw. Infobereiche ( z.B. News, GB etc., eventuell mal um ein kleines Forum erweitern.. ) einteilen möchte und nicht für jeden bereich eine eigene Benutzerverwaltung machen muß, sondern eine in der die Berechtigung auf die einzelnen Bereiche für den User stehen. Also ungefähr

user | bereich1 | bereich2 | bereich3
xyz | lesen | r/w | nüschts
admin | r/w | r/w | r/w
zyx | nüscht | lesen | lesen

Gruppen oder rollen wollte ich nicht benutzen. Ich denke es läuft auf ein Berechtigungskonzept wie in einem Forum zunächst ohne Rollen oder Gruppen hinaus. Da ich im Mom noch nicht genau weiß, ob und wann ich dazu komme all das zu machen was ich vor habe wäre es gut wenn das Berechtigungskonzept erweiterbar ist.
Gruß
Canni
Canni ist offline  
Alt 24.08.2006, 20:09  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi Canni.

Wenn das so machen willst, dann leg die Beriche jedoch nicht als Spalten einer DB-Tabelle an, sonden arbeite mit einer Zuordunstabelle:

sections:
guestbook, bla
news, blubb

rights:
paul, guestbook, write
gerda, news, write
paul, news, write
hans, guestbook, read

Das Ding ist halt, dass sich bei sowas in der Regel eben schnell herausstellt, dass Gruppen von Benutzern gleiche Rechte haben und dann macht es eben Sinn, eine Tabelle zu erstellen, in der du einen Benutzer 1-n Gruppen zuordnen kannst und eine, in der du jeder Gruppe verschiedene Rechte zuweisen kannst. So kannst du später z.B. für einen neuen Bereich einfach definieren, dass alle Moderatoren (die, die bisher fremde Gästebuch-Einträge bearbeiten durften) dann auch im Forum fremde Beiträge editieren dürfen etc.

Basti

PS:
Page heißt Seite, Seite aber nicht Site. Du meinst deine Website (ohne e), sprichst aber von Page.
Basti ist offline  
Alt 25.08.2006, 11:49  
Benutzer
 
Registriert seit: 23.08.2006
Beiträge: 86
Canni
Standard

Hi Basti.
Page => kurzform von Homepage ( allgemeiner Sprachgebrauch für Website ) => Site => natürlich .

Mir ist noch nicht ganz klar wie ich

sections:
guestbook, bla
news, blubb

rights:
paul, guestbook, write
gerda, news, write
paul, news, write
hans, guestbook, read

Datenbankmäßig umsetzten kann / soll.
Eine Tabelle Gruppen
Eine Tabelle User => soweit^^
dann:
eine Tabelle rights und eine Tabelle sections ( die Zuordnungstabelle sollte ja auch eine DB Tabelle sein )?

Wie sieht es denn mit dem folgenden Ansatz aus:
Tabelle rechte
recht;Maske
lesen; 00000001
schreiben;00000010
ändern; 00000100
Tabelle user
user;section1;section2;section2
Paul;00000001 (lesen);00000011(lesen+schreiben);00000111(lesen schreiben und ändern)

00000101 dürfte dann z.b. zwar lesen und ändern aber selbst nicht verfassen
00000010 dürfte nichts ändern und nicht lesen ( z.b. beiträge von anderen )
Canni ist offline  
Alt 25.08.2006, 14:42  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Zitat:
Mir ist noch nicht ganz klar wie ich

sections:
guestbook, bla
news, blubb

rights:
paul, guestbook, write
gerda, news, write
paul, news, write
hans, guestbook, read

Datenbankmäßig umsetzten kann / soll.
Ich meinte das eigentlich so, wie oben geschrieben:
Eine Tabelle "sections" mit der ID des Bereiches (und sonstigen Atrributen) und eine Tahelle "rights" mit den Feldern "id" (auto increment), "user", "section", "permission" oder so. Damit kannst du die Rechte für jeden Benutzer auf jeden Bereich abbilden. Kein Eintrag hieße z.B. keine Rechte des Benutzers an dem Bereich.

Zitat:
Wie sieht es denn mit dem folgenden Ansatz aus:
Tabelle rechte
recht;Maske
lesen; 00000001
schreiben;00000010
ändern; 00000100
Tabelle user
user;section1;section2;section2
Paul;00000001 (lesen);00000011(lesen+schreiben);00000111(lesen schreiben und ändern)

00000101 dürfte dann z.b. zwar lesen und ändern aber selbst nicht verfassen
00000010 dürfte nichts ändern und nicht lesen ( z.b. beiträge von anderen )
Die Frage ist, ob du alle Rechte derart vereinheitlichen kannst. Wenn lesen, schreiben und ändern in allen Bereichen ausreicht, dann passt das ja. Wenn aber in einem Bereich vielleicht noch verschieben, kommentieren, veröffentlichen etc. dazukommen, dann musst du dafür dann entweder einen eigenen Bereich anlegen (Kommentare lesen/schreiben/ändern) oder ein Bit hinzufügen, das für andere Bereiche dann wieder uninteressant sein könnte.

Wenn das für dich o hinhaut, dann leg die Werte jedoch als Integer in die Datenbank und mach die Überprüfung in PHP auf der Bit-Ebene. Zum Beispiel:

PHP-Code:

// Konstanten zur einfachen Handhabung:

define('PERM_READ'<< 0);
define('PERM_WRITE'<< 1);
define('PERM_EDIT'<< 2);

// Klasse User:

public function hasPerm($sSection$cOperation)
{
    
$iPerm $this->getRight($sSection);
    return 
$iPerm $cOperation;
}

protected function 
getRight($sSection)
{
    if (!isset(
$this->aRights[$sSection]))
        return 
0;

    return 
$this->aRights[$sSection];
}

// Benutzung:

if ($this->User->hasPerm('section_a'PERM_WRITE)
    
$this->soSomething();

// sontige Operationen:

// Schreibrechte loeschen:
$this->aRights[$sSection] &=  ~PERM_WRITE;

// Editierrechte hinzufuegen:
$this->aRights[$sSection] |= PERM_EDIT
...oder so in der Art halt.

Was, wie gesagt ungünstig ist, ist, die Sektionan als Tabellespalten zu definieren, da du für Änderungen in dem Punkt dein DB-Layout verändern musst und das mitunter ziemlich ätzend werden kann (z.B. bei Backups etc.).

Also tatsächlich lieber diese Zuordnungstabelle mit user, section, permission schreiben. Das ist auch der übliche Weg, eine n:m- bzw. nc:mc-Bezehung abzubilden (ein Benutzer kann (c) einer oder mehreren (n) Bereichen zugeordnet sein, ein Bereich kann (c) einem oder mehreren (m) Benuzern zugrodnet sein - mit den jeweiligen Rechten).

[OT]
Zitat:
Zitat von Canni
Page => kurzform von Homepage ( allgemeiner Sprachgebrauch für Website )
Wenn man in dem Beraich arbeitet, macht es Sinn, die Begriffe richtig zu gebrauchen, auch wenn diese von Laien und Kunden oft anders gebraucht werden. Die Homepage ist nunmal die Startseite einer Website, auch wenn im deutschsprachigen Raum es eben diesen fase friend (Seite - Site) gibt und daher eben Page mitunter synomym mit Site benutzt wird.

Warum macht es Sinn? Unter Kollegen kann man Missverständnisse vermeiden; im internationalen Austausch, sowie in Präsentationen vor mitunter kundigem Publikum ("Willkommen auf der Homepage unseres Verbandes") vermeidet man Unverständnis bzw. Geringschätzung und man trägt nicht dazu bei, diesen Übersetzungsfehler weiter zu verbreiten.
[EOT]

Basti
Basti ist offline  
Alt 25.08.2006, 18:34  
Benutzer
 
Registriert seit: 23.08.2006
Beiträge: 86
Canni
Standard

Zitat:
Wenn man in dem Beraich arbeitet, macht es Sinn, die Begriffe richtig zu gebrauchen, auch wenn diese von Laien und Kunden oft anders gebraucht werden. Die Homepage ist nunmal die Startseite einer Website, auch wenn im deutschsprachigen Raum es eben diesen fase friend (Seite - Site) gibt und daher eben Page mitunter synomym mit Site benutzt wird.

Warum macht es Sinn? Unter Kollegen kann man Missverständnisse vermeiden; im internationalen Austausch, sowie in Präsentationen vor mitunter kundigem Publikum ("Willkommen auf der Homepage unseres Verbandes") vermeidet man Unverständnis bzw. Geringschätzung und man trägt nicht dazu bei, diesen Übersetzungsfehler weiter zu verbreiten.
Jepp. Da geb ich dir allerdings recht. Man ordnet sich schnell dem allgemeinen Sprachgebrauch unter. Muß mal mehr darauf achten ( schließlich weiß ich´s ja ).
Und danke nochmal für die Hilfe und Anregungen. Ich muß das jetzt erst mal setzen lassen und abwägen wie ich weitermache
Schönes WE, Canni
Canni ist offline  
Alt 25.08.2006, 20:28  
Erfahrener Benutzer
 
Registriert seit: 02.08.2004
Beiträge: 209
PHP-Kenntnisse:
Fortgeschritten
Chance
Chance eine Nachricht über ICQ schicken
Standard

Ich habe für die Rechteverwaltung der User eine Key Tabelle angelegt, in der beschrieben ist, was möglich ist, z.B. edit,new,delete .
Jeder User und Benutzergruppe kann mit meheren Keys ausgestattet sein.
__________________
Web-Entwickler/-in bei der IAK GmbH
Chance ist offline  
Alt 25.08.2006, 20:40  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Auch einen Blick wert ist phpGACL[1]. Das Handbuch[2] ist auch gleich eine ganz gute Einführung in das Thema.

Basti

[1] http://phpgacl.sourceforge.net/
[2] http://phpgacl.sourceforge.net/manual.pdf
Basti ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Userverwaltung für Anmeldescript maeck PHP-Fortgeschrittene 24 24.06.2008 19:25
Berechtigungen bei Dateien. Skazi PHP Tipps 2008 6 04.06.2008 14:58
Brauche Hilfe für Teilumsetzung eines Webprojekts (Loginsystem, Userverwaltung etc.) daddycool PHP Tipps 2008 1 11.02.2008 21:12
[Einsteiger-OOP] Userverwaltung mit Anti-Brutoforcing [...] agrajag Tutorials 8 10.11.2006 16:04
Komisches problem mit Datei Berechtigungen stuvomatic PHP Tipps 2006 5 28.05.2006 01:49
Userverwaltung Hilfe! Datenbanken 6 20.10.2005 15:22
imagejpg und berechtigungen greenrover PHP-Fortgeschrittene 8 24.08.2005 20:59
Nested Sets mit Berechtigungen? daniel987 Datenbanken 3 07.06.2005 22:18
UserVerwaltung -> Ausgeben aller User PHP Tipps 2005 19 16.04.2005 23:25
berechtigungen aircrash Server, Hosting und Workstations 14 07.02.2005 19:47
[Erledigt] Nach ftp_rename() sind Berechtigungen anders. PHP-Fortgeschrittene 1 22.10.2004 15:01

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
gästebuch mit userverwaltung, php berechtigungskonzept pdf, userverwaltung php, php benutzerverwaltung rechteverwaltung, http://www.php.de/php-tipps-2006/41833-berechtigungen-userverwaltung.html

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.