php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 14-10-2007, 13:29
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard Zugangsberechtigung für User-Typen

Hi

Ich habe gerade ein kleines logisches Problem und weiss nicht, wie ich das realisieren soll. Es geht um folgendes:

Ich habe mir mal spasseshalber angefangen ein Forum zu coden (wer es sehen will / muss). Bisher klappt ja alles ganz gut, aber jetzt würde ich gerne Zugangsberechtigungen für die einzelnen Unterforen einbauen, also so in etwa wie:

Registrierte Benutzer dürfen schreiben und lesen, nicht Registrierte dürfen nur lesen und nicht schreiben, oder nichts von beidem.

Wie soll ich das realiseren? Soll ich in der Tabelle in denen ich die Forums gespeichert haben zwei Attribute anlegen "wright" (Schreibrecht) und "rright" (Leserecht). "0" wäre dann "für alle zugelassen" und "1" wäre "nur für registrierte".

Wenn sich ein User anmeldet wird eine SESSION-Variable "tspb_type" angelegt (0 = User, 1 = Admin), ist der User nicht angemeldet ist die Variable nicht gesetzt... wie realisiere ich jetzt die Zugangsberechtigung am besten? Bin über jeden Vorschlag oder sogar Code-Beispiele froh.

Geändert von pascal007 (14-10-2007 um 13:31 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 14-10-2007, 13:37
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Schau dir mal die ACLs vom Zend Framework an.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 14-10-2007, 13:48
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Würde das aber gerne selbst coden (das interessiert mich) und nicht eine fertige Klasse nutzen... trotzdem danke für den Hinweis .
Mit Zitat antworten
  #4 (permalink)  
Alt 14-10-2007, 13:57
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Habe ich "schauen" oder "benutzen" gesagt?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 14-10-2007, 14:22
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von combie
Habe ich "schauen" oder "benutzen" gesagt?
Okay, hast gewonnen . Ich habe mir das Kapitel zu der Klasse zend_acl mal durchgelesen und mir auch die dazugehörenden Dateien mal angeschaut, aber ich verstehe nur Bahnhof . Ich kann irgendwie keine Verbindung zu meiner Forumsberechtigungen herstellen...
Mit Zitat antworten
  #6 (permalink)  
Alt 14-10-2007, 14:51
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Nagut, dann etwas Ausführlicher..
aber ohne auf Einzelheiten ein zugehen..

Du bist nicht der Erste mit einem solchen Probleme.

Und da du in einem Forum Fragen dazu stellst, vermute ich mal, dass deine selbstgebastelte Lösung nicht unbedingt sofort besser besser als eine fertige Lösungen wird.

Schau dir ab, wie es Andere gelöst und eingesetzt haben.

1. Für dich würde wohl ein User+Gruppen Konzept erstmal reichen. Schau dir an wie Linux das macht. Nachbauen!

2. ACLs sind deutlich komplexer und universeller, feiner einstellbar. Da kannst du dir, in etwa, bei Windows was abschauen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #7 (permalink)  
Alt 14-10-2007, 15:46
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Access Control Lists sind sehr sinnvoll, damit kann man eigentlich alles sehr flexible realisieren. Die Implementation von Zend ist afaik nicht so toll (langsam und sehr aufwändig), die Dokumentation und das Konzept ist aber ganz gut. Prinzipiell ist das ganze in drei Bereiche aufgeteilt: Rollen, eine Art Gruppe oder ein Benutzer, Ressourcen, das sind Module oder in deinem Fall zum Beispiel Foren / Threads und Aktionen (Hinzufügen, Bearbeiten, Löschen, usw.). Du kannst jede Kombination dieser drei erlauben oder verbieten. Je nach dem was du machst fragst du wieder eine Kombination ab. Ich hab die Dokumentation meiner Implementation mal angehängt wenn dich das interessiert.
Angehängte Dateien
Dateityp: zip acl.zip (2,9 KB, 324x aufgerufen)
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #8 (permalink)  
Alt 14-10-2007, 16:23
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Das ist ja sehr nett von dir @tontechniker, aber ich will doch eifnach nur das selbst möglichst elegant realiseren. Da das Board vor allem aus der Idee entstanden ist meine Fähigkeitne in PHP und MySQL zu verbessern, will ich da wenn möglich alles selbst schreiben (oder in einem Forum mit erfahrenen Usern eine Lösung erarbeiten ). Damit ich auch bei jeder Codezeile weiss, was das Script macht.

Deshalb wäre ich schon mit einer detailiertert Vorgehensweise die auf meine Situation zutrifft vollkommen zufrieden .

Geändert von pascal007 (14-10-2007 um 16:26 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 14-10-2007, 17:30
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zwei übliche und weitverbreitete Konzepte wurden dir vorgeschlagen. Jetzt ist es an dir weitere zu suchen, oder diich für eine der beiden zu entscheiden. Danach Implementieren.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #10 (permalink)  
Alt 15-10-2007, 04:14
PHPler
 Registrierter Benutzer
Links : Onlinestatus : PHPler ist offline
Registriert seit: Oct 2003
Beiträge: 250
PHPler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab in meinem CMS die Benutzerverwaltung wie folgt gelöst:

1) Du arbeitest von Grund auf mit Benutzergruppen. Jeder Besucher wird automatisch einer Benutzergruppe zugeordnet, auch wenn er nur Gast ist. Dann erstellst Du z.B. folgende Gruppen:
1 Gast
2 Standard Benutzer
3 Premium Benutzer
98 Moderator
99 Administrator

2) Du ordnest nun den Besuchern die Benutzergruppen zu. Jeder Besucher, der nicht eingeloggt ist, bekommt automatisch die Benutzergruppe 1. Jeder Besucher der sich einloggt bekommt automatisch die Benutzergruppe 2. Premium Benutzer (wenn Du denn welche hast) bekommen die Benutzergruppe 3. Moderatoren 98, Administratoren 99.

3) Du Speicherst alle Benutzergruppen die einem Benutzer zugeordnet sind in ein Array.

4) Du schreibst deine Funktion, und überlegst Dir, welche Benutzergruppen diese aufrufen dürfen. Daraus ergibt sich dann folgender Code:

PHP-Code:
$userrank = array(...); // Array mit den Benutzergruppen

function foo() {
    ... 
// Meine Funktion
}

/*
Überprüft, ob die angegebenen Benutzerränge 3, 97 bzw. 99 in
$userrank gespeichert sind. Ich habe mich hier für array_intersect
entschieden, um zwei Arrays zu vergleichen. Damit ist es egal ob
dem Benutzer die Benutzergruppe 3, 97 oder 99 zugeordnet ist.
Sobald eine Übereinstimmung gefunden ist, wird die Funktion
aufgerufen.
*/
if(count(array_intersect($userrank, array(3,97,99))) > 0) {
    
foo();

Für weitere Funktionen kannst Du Dir dann natürlich weitere Benutzergruppen zulegen.

Geändert von PHPler (15-10-2007 um 23:57 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 15-10-2007, 11:51
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

solche Antworten meinte ich . Vielen Dank ! Werde mal mein Glück mit deiner Idee und dem Code dazu versuchen .

Eines ist mir noch ein klein wenig unklar: wenn ich jetzt z.B. bei

PHP-Code:
... $userrank, array(3)) ... 
nur die 3 im Array drinnstehen habe, und es kommt ein Admin (99) ist dann die Abfrage auch wahr? Also kann dann jede Zahl die grösser als 3 ist die Funktion foo() aufrufen?

Geändert von pascal007 (15-10-2007 um 11:55 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 15-10-2007, 17:19
PHPler
 Registrierter Benutzer
Links : Onlinestatus : PHPler ist offline
Registriert seit: Oct 2003
Beiträge: 250
PHPler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein, es geht nicht darum, dass jeder dessen Zahl größer ist als 3 automatisch Zugriff hat. Wenn Du z.B. einen User hast mit dem Rank 2 (Standard User) und 99 (Administrator), also:

PHP-Code:
$userrank = array(2,99); 
Und Du machst dann den hier:

PHP-Code:
if(count(array_intersect($userrank, array(3))) > 0
Die ganze Abfrage überprüft, ob 3 in $userrank gespeichert ist. Da im Userrank nur 2, und 99 gespeichert ist, ist die Abfrage also falsch, und der Benutzer kann die Funktion nicht aufrufen, obwohl er Administrator ist. Erst wenn Du dem Benutzer die Benutzergruppe 3 zuweist, also:

PHP-Code:
$userrank = array(2,3,99); 
ergibt die Abfrage ein Wahr, und der Benutzer kann die Funktion aufrufen. Für Administratoren kannst Du Dir den Aufruf auch folgendermaßen anpassen:

PHP-Code:
if(in_array(99$userrank) OR count(array_intersect($userrank, array(3))) > 0
Damit kann der Administrator in jedem Fall die Funktion aufrufen.

Somit kannst Du für alles eigene Rechte setzen und das ganze dann über die Benutzergruppen steuern. Hast Du (aus welchen Gründen auch immer) viele Benutzergruppen, kannst Du Dir im übrigen auch eine Umkehrfunktion dazu basteln, so dass du auch einzelne Benutzergruppen ausschließen kannst.
Mit Zitat antworten
  #13 (permalink)  
Alt 15-10-2007, 20:28
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Kannst du deinen blöden Kommentar im Quelltext bitte umbrechen? Macht voll kein Spa0, diesen Thread zu lesen!!
Mit Zitat antworten
  #14 (permalink)  
Alt 15-10-2007, 21:49
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Okay, jetzt is mir das klar.

Hast du auch noch einen Tipp, wie ich am besten dieses Array des Users beim einloggen zusammenbaue? Also dass wenn er Admin ist, alle Typen (3,2,1,99, usw.) in dem Array stehen?
Wie hast du das gemacht gelöst?
Mit Zitat antworten
  #15 (permalink)  
Alt 15-10-2007, 22:28
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Schreib den Wert in die Datenbank und kombiniere in_array und array_slice. Und brich deinen Code um!
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:38 Uhr.