| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Supermoderator HD Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | 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 | +--------+---------+ Mäxx und Caro dürfen lesen und Udo darf als einziger lesen und schreiben.
__________________ Refining Linux Advent Calendar series “24 Outstanding ZSH Gems” |
| | |
| | |
| Erfahrener Benutzer | @#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. ********************************** |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 05.08.2008
Beiträge: 1.000
![]() | 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. |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 06.09.2008
Beiträge: 189
![]() | @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:
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. | |
| | |
| | |
| Supermoderator HD Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | @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). |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 06.09.2008
Beiträge: 189
![]() | Zitat:
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:
__________________ 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). | |
| | |
| | ||
| Erfahrener Benutzer | Zitat:
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. ********************************** | |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 06.09.2008
Beiträge: 189
![]() | 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. |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ä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 |