php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.09.2008, 12:51  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.000
drsoong befindet sich auf einem aufstrebenden Ast
Standard Will ja nicht weiter stören, aber...

Zitat:
Und hättest du dir meine Klasse durchgelsen, dan wüsstest du, dass es genau so ist. Jeder User bekommt nur eine Permissions-Zahl zugewissen, aus der man alle IDs der Bereiche zu denen er Zutritt hat extrahieren kann.
1. Sorry, ich habe tatsächlich nicht den kompletten Code analysiert, was aus meiner Sicht auch erlaubt sein soll, wenn der über 15 Zeilen hinausgeht. Statt dessen habe ich mich auf das gestützt, was Du ansonsten so sagst.

Du kannst mich da gerne noch mal korrigieren: Ich verstehe das ein User z. B. folgende Rechte hat.

Bereich A => Lesen, Schreiben
Bereich C => Erstellen
Bereich U => Lesen
usw.

So und jetzt sagst Du wieder in direkter Antwort auf meine Einwände
Zitat:
alle IDs der Bereiche zu denen er Zutritt hat extrahieren kann.
was für mich orientiert am obigen Beispiel nur heißt, dass Du lediglich

A, C, U ermittelst aber nicht die Rechte innerhalb von A,C,U.
drsoong ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.09.2008, 13:57  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Ich halte es da eher mit drei Tabellen:
Code:
Table `user`:
+----+------+
| id | name |
+----+------+
|  1 | Mäxx |
|  2 | Caro |
|  3 | Udo  |
+----+------+


Table `right`:
+----+-----------+
| id | name      |
+----+-----------+
|  1 | lesen     |
|  2 | schreiben |
+----+-----------+


Table `permission`:
+--------+---------+
| userid | rightid |
+--------+---------+
|      1 |       1 |
|      2 |       1 |
|      3 |       1 |
|      3 |       2 |
+--------+---------+
Damit kann man alle Rechte, die man braucht festlegen und man hat auch keine Begrenzung.

Mäxx und Caro dürfen lesen und Udo darf als einziger lesen und schreiben.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 07.09.2008, 14:36  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

@#Avedo:
Ohne mal auf das Prinzip der Bitmasken für Berechtigungen näher einzugehen, finde ich an Deinem Code eine Sache gruselig:

In calcPerms wird erwartet, dass $mods die Berechtigungen in Form der ID, also des Exponenten 0,1,2,3,... enthält.
In getPerms wird aber die jeweilige Potenz (1,2,4,8,...) in $mods zurück geliefert.

Etwas mehr Konsistenz wäre nicht schlecht. Da passieren Fehler doch mit Ansage.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline   Mit Zitat antworten
Alt 07.09.2008, 15:17  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.000
drsoong befindet sich auf einem aufstrebenden Ast
Standard Die Lösung von Manko10

addressiert glaube ich nicht ganz das volle Problem, oder?

Gut, man weiß jetzt das Udo lesen und schreiben darf, was sicherlich
auch sehr schnell zu ermitteln ist. Allerdings weiß man da gar nicht wo
diese Rechte ausgeübt werden können. Stichwort: Bereiche.
drsoong ist offline   Mit Zitat antworten
Alt 07.09.2008, 15:22  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

@Flor1an: Welchen tieferen Sinn soll es denn in einem solchen Rechtesystem erfüllen zu wissen, welche Leute alle das Recht haben in Bereich A zu kommen?Wenn du überprüfen möchtest, ob ein Nutzer einen bereich betreten darf kannst du auch einfach den Namen oder die ID des Nutzers und des Bereichs an die Methode check übermitteln. Man kann dazu natürlich eine Methode machen, aber ich muss sagen, dass mir da der tiefere Sinn fehlt.

@Der_Gerhard:
Zitat:
Etwas mehr Konsistenz wäre nicht schlecht. Da passieren Fehler doch mit Ansage.
Was willst du mir jetzt damit sagen? Die getPerms()-Methode könnte ich tatsächlich noch anpassen. Man müsste ja bloß den Logarithmus zur Basis 2 auf alle Elemente anwenden.

Mit der Methode calcPerms() ist es relativ einfach möglich die Zugriffsrechte eines Nutzers zu ändern. Als erstes holt man sich mit getMods() alle existierenden Bereiche und dann mit getPerms() die Ids zu den Bereichen, zu denen der bearbeitete Nutzer momentan Zugriffsrechte besitzt. Nun gibt man für alle Bereiche eine Checkbox aus, wobei man mit in_array() überprüft, ob der Benutzer zum Zeitpunkt des erstellens der Checkboxen die Zugriffsrechte zu diesem Bereich besitzt. Ist dies der Fall wird die Checkbox als checked erstellt. nach der Ausgabe sind nun also für alle geschützten Bereiche erstellt worden, wobei die zu denen der Nutzer Zugriffsrechte besitzt makiert sind. Nun kann man die Zugriffsrechte durch markieren der Checkboxen beliebig ändern. Nach dem Absenden des Formulars steht also ein Array mit den Ids der Bereiche, zu denen der Benutzer zukünftig Zugriff haben soll, zur Verfügung. Mit der Methode calcPerms() errechnet man nun den binären Wert, der in die Spalte permissions in die Benutzer-tabelle eingetragen werden soll. Dies geschieht dann über die Methode editUser(), der man einfach alle zu ändernden Felder und ihre zugehörigen Values übergibt.

Ich hoffe ich konnte etwas Licht ins Dunkel bringen. Werde, wenn ich morgen mal kurz Zeit habe die Methode getPerms() mal ändern.
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 07.09.2008, 15:36  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

@drsoong: Wenn du willst, kannst du statt 'lesen' auch 'Gästebuch lesen' oder eine Nummer vergeben. Das steht dir ja völlig frei.
Wenn du willst, kannst du auch einen Table für die Bereiche anlegen, die du im Table `permission` ebenfalls referenzierst. Somit kannst du für jeden Bereich abfragen, welcher User hier lesen oder schreiben oder sonst etwas darf.

Du hast bei der Lösung vielleicht einen Table mehr, aber ich halte sie für bei Weitem nicht so komplex wie die Lösung mit boolescher Algebra. Außerdem hat sie keine Beschränkung von 31 Rechten.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems

Geändert von Manko10 (07.09.2008 um 15:59 Uhr).
Manko10 ist offline   Mit Zitat antworten
Alt 07.09.2008, 15:55  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
was für mich orientiert am obigen Beispiel nur heißt, dass Du lediglich
A, C, U ermittelst aber nicht die Rechte innerhalb von A,C,U.
Wieso willst du das denn trennen? Machen wir doch einfach mal ein Beispiel:
In der Tabelle für die Bereiche steht:

ID | Bereich
1 | Article add
2 | Article edit
3 | Article remove
4 | User add
5 | User edit
6 | User remove
7 | Guestbook edit
8 | Guestbook remove
9 | Counter reset
10 | Settings edit
11 | NewsFeed add
12 | NewsFeed edit
13 | NewsFeed remove
14 | Imprint edit
15 | Download add
16 | Download remove
17 | Statistics view
18 | Newsletter send

Zudem gibt es ja auch bereiche, in denen man auch mit den rechten NULL arbeiten kann. Zum Beispiel das eigene Profil verwalten. Zudem gibt es wie du auch siehst nicht immer die Notwendigkeit add, edit and remove zu deklarieren. Es macht bei einem Counter zum Beispiel nur eine reset-Funktion Sinn. Oftmals kann man zum Beispiel, wie beim Impressum nur das ganze editieren. Braucht man diesen Bereich nicht mehr oder man braucht ein neues kann man das jeweilige Modul installieren.

MfG, Andy

//EDIT: habe mal folgende Zeile in der Methode getPerms() geändert, sodass nun die IDs der Bereiche zurückgegeben werden.
PHP-Code:
$mods[] = log($i2); 
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.

Geändert von #Avedo (07.09.2008 um 16:16 Uhr).
#Avedo ist offline   Mit Zitat antworten
Alt 07.09.2008, 16:25  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von #Avedo Beitrag anzeigen
@Der_Gerhard: Was willst du mir jetzt damit sagen? Die getPerms()-Methode könnte ich tatsächlich noch anpassen. Man müsste ja bloß den Logarithmus zur Basis 2 auf alle Elemente anwenden.
Damit meine ich, dass zum Setzen und Abfragen des selben Feldes auch die selben Werte verwendet werden sollten.

Wenn ich einen Benutzer aus einem Bereich ausschließen (oder hinzufügen) will, ohne die anderen zu verändern, muss man mit Deiner Methode getPerms aufrufen, dann alle Werte des Arrays umrechnen, das eine Feld verändern und danach das Array wieder in calcPerms reinschieben.
Du musst immer aufpassen, ob Du nun ein Feld mit Parameters aus getPerms hast oder eines für calsPerms.

Das ist ganz einfach inkonstistent.
[/quote]
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline   Mit Zitat antworten
Alt 07.09.2008, 16:36  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Naja nun brauchst du ja nicht mehr alle Werte umrechnen. Es werden nun ja direkt die IDs der Bereiche zurückgegeben und dann kann man ja verfahren, wie ich es oben bereits erläutert habe.
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 07.09.2008, 18:15  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Community, User haben verschieden Rechte z.b. Premium/Normale User, Moderatoren etc. Und jetzt möchte ich eben eine Liste aller Premium User etc.
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline   Mit Zitat antworten
Antwort


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
Mysql organisation und Rechtesystem SchmaR PHP Tipps 2008 3 08.05.2008 19:25
Problem bei binärem Rechtesystem SilentSight PHP-Fortgeschrittene 27 28.04.2008 15:07
Rechtesystem seejay Datenbanken 14 09.02.2006 21:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php binäres rechte, binäres und php, php welches rechtesystem, php rechtesystem, php rechtesystem download, php rechtesystem mit bitmasken

Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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