php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.10.2010, 17:24  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard Rechteverwaltung mal anders beleuchtet

Hallo Zusammen

Ich habe die Forensuche bereits verwendet sowie google mit den entsprechenden Begriffen durchlöchert. Verschiedene Konzepte mir angesehen und bin mir jetzt nicht sicher wie ich die Rechteverwaltung aufbauen soll.

Aus dem Beitrag aus diesem Forum hier:

http://www.php.de/php-einsteiger/528...erstellen.html

Geht eigentlich nur hervor dass man Rechte nur Benutzern hinzufügen soll wenn es sein muss und ansonsten via Gruppen oder Rollen.

Soweit klar, kenne ich von der UAC bei Windows Domänen Infrastrukturen.

Einen etwas anderen Ansatz habe ich in diesem Artikel hier gefunden:

Kurzfassung: Es existieren gezielte Berechtigungen auf Funktionen an bestimmten Stellen in der Anwendung. Artikel erstellen im Blog unterscheidet sich von Artikel erstellen in den News wie folgt:

- webApp.News.Article.Create
- webApp.Blog.Article.Create

Diese "Funktionen/Rechte" werden dann an Rollen, Gruppen oder User zugeteilt. Der Ausführliche Artikel zum nachlesen:

http://blog.wolff-hamburg.de/archive...anagement.html

Was haltet Ihr von dieser Idee? Es ist ein anderer Ansatz aber scheint mir durch seine Einfachheit einen grossen Vorteil mitzubringen.

Gerade wenn es darum geht "Funktionsberechtigungen" zu verwalten und nicht einfach Berechtigungen auf eine Datei oder einen Eintrag in der Datenbank.

Ich bin an einer Webanwendung bei der ich grundsätzlich zwischen drei Berechtigungstypen unterscheide:

Funktionsberechtigungen

Können durchaus mit Rollen verwalten werden ( z.Bsp. Neue User erstellen, ein Projekteröffnen etc. )

Rollen: Administrator, Projektleiter, Mitarbeiter, Gast etc.

Aktionssberechtigungen

Der User darf eine Datei hochladen, er darf eine bestehende Datei durch eine neue Version ersetzen, er darf eigene Dateien löschen etc.

Könnte man mit Gruppen definieren.

Zugriffsberechtigungen

Ein User der im System arbeitet und die Aktionsberechtigung zum hinzufügen neuer Dateien hat darf selber definieren ob seine Datei nur gelesen, bearbeitet oder gelöscht werden darf.

Ich habe also drei verschiedene Punkte wie ich Rechte behandeln und verarbeiten will.

Spricht etwas dagegen Rollen + Gruppen zu mischen? In meinem Fall würde ich die Rollen ja nicht als "Pseudogruppen" missbrauchen sondern als solche einsetzen.

Und wenn, wie setze ich es am besten um? Der Ansatz von Markus auf Wolff Hamburg wo beim login die Rechte geladen werden und mit "natürlichenbezeichnungen" alle Rechte zur Verfügung stehen anstatt globalen "Funktionen" ( wie lesen, schreiben etc. ) gefällt mir. Ich mach mir aber Sorgen dass ich mir damit flexibilität verbaue.

Beispielsweise könnte man auch den Gedanken verfolgen dass Grundsätzlich nur Rollen existieren, und auf Basis dieser alle Rechte gegeben sind und man den Ansatz der restrektiven Berechtigungsvergabe verfolgt und nur noch verbietet was man muss.

Wie würdet Ihr das umsetzen oder habt ihr vielleicht weitere Links zum Thema?

Vielen Dank und schönen Feierabend!

eXe
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.10.2010, 18:32  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von da.eXecutoR Beitrag anzeigen
Geht eigentlich nur hervor dass man Rechte nur Benutzern hinzufügen soll wenn es sein muss und ansonsten via Gruppen oder Rollen.
Konsequent durchgeführt würde das bedeuten, das wenn da.eXecutoR im Forum PHP-Fortgeschrittene Artikel von anderen Personen löschen können soll, dann wird eine neue Rolle da.eXecutoR hinzugefügt, der einzige Benutzer, der diese Rolle hat ist da.eXecutoR und die Rolle bekommt die Berechtigung, im Forum PHP-Fortgeschrittene Artikel von anderen Personen löschen zu können.

Ubuntu macht das so ähnlich, ich habe hier auf meinem Rechner eine Gruppe mimomamu ganz alleine für mich.

Ist IMHO irgendwie nicht Sinn der Sache.

Zitat:
Zitat von da.eXecutoR Beitrag anzeigen
Da steht's ja eigentlich schon drin: "Where it fails is when you have user-generated content for which you want to maintain object-specific ACLs".

Es gibt viele Ideen, wie man Rechte verwaltet. Jede hat seine Berechtigung. Eines ist aber IMHO in Stein gemeiselt. Und das ist die Frage, ob ein bestimmter Benutzer eine bestimmte Aktion auf einem bestimmten Objekt ausführen darf. Und diese Frage kann man so beantworten:
PHP-Code:
interface Authorization {
  
/**
   * Tests whether the specified user is allowed to execute the specified
   * action on the specified data.
   *
   * @param $user The user the wants to execute the action
   * @param $action The action that the user wants to execute
   * @param $data The data on which the user wants to execute the action
   * @return boolean true: the user is allowed to execute the action on the
   *     data; false otherwise
   */
  
function isAllowed($user$action$data);

Die konkrete Implementierung dieser Schnittstelle hängt immer von den Anforderungen ab. Es gibt ein paar Standard-Implementierungen (ACL, Rollenbasiert, etc.) aber im Grunde genommen muss man für jedes Projekt neu entscheiden, welche geeignet ist.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden
mimomamu ist offline   Mit Zitat antworten
Alt 01.10.2010, 22:25  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

Hey mimomamu

Danke für deine Antwort. Ich hab mir jetzt nochmal Gedanken gemacht dazu und nachdem ich mein Whiteboard nun zum hundertsten mal überkribelt habe bin ich zu folgendem Lösungsansatz gekommen.

Grundsätzliche Funktionsrechte werden in einer Tabelle wie folgt gespeichert:

Code:
+----+-------------+
| ID | rightCode   |
+----+-------------+
| 1  | userNew     |
| 2  | fileDelete  |
| 3  | blogEdit    |
+----+-------------+
Dann gibt es eine Tabelle welche die Rollen definiert:

Code:
+----+---------------+
| ID | roleName      |
+----+---------------+
| 1  | Administrator |
| 2  | Member        |
| 3  | Guest         |
+----+---------------+
An der Stelle natürlich noch eine Tabelle in der die User den Rollen zugewiesen werden.

Nun kommen wir zur eigentlichen Rechtetabelle.

Code:
+----+--------------------------------------+
| ID | rightID | roleID | userID | objectID |
+----+--------------------------------------+
| 1  | 1       | 2      | NULL   | NULL     |
| 2  | 1       | 3      | NULL   | NULL     |
| 3  | 1       | NULL   | 5      | NULL     |
+----+--------------------------------------+
Die Policy dazu sieht folgendes vor:

1. Grundsätzlich ist jede Funktion auf jedem Objekt für jeden Benutzer erlaubt.
2. Das Vererben von Rechten ist restrektiv. Eine Sperrung kann nicht aufgehoben werden, weder vererbt noch direkt zugewiesen.

Ausgehend von diesem Ansatz sehen wir im Obigen Beispiel dass den Rollen Member und Guest das erstellen eines neuen Users verboten ist. Ebenfalls existiert ein Verbot zum erstellen neuer Benutzer für den User mit der ID 5.

Das heisst ich kann dem Benutzer mit ID 5 die Rolle des Administratoren zuweisen und explizit das Recht zur Erstellung neuer Benutzer sperren.

Die Spalte objectID wird dann dazu verwendet einer Rolle oder einem einzelnen Benutzer z.Bsp. das Recht fileDelete auf einer einzelnen Datei zuzuweisen.

in der Praxis sieht es dann so aus:
PHP-Code:
if(checkRight('fileDelete',$fileID,$userID) == true){
   
unlink($fileID.img);
}else{
   echo 
"Keine Berechtigung zum löschen dieser Datei.";

Wenn für die BenutzerID oder der Ihm zugewiesenen Rolle kein Datensatz allgemein oder auf die objectID <> fileID existiert ist ihm das Recht gewährt ansonsten nicht.

Was haltet ihr von diesem Konzept?

Grüsse

eXe
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Alt 04.10.2010, 16:33  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

Keine Anmerkungen mehr dazu?

Grüsse
__________________
It's not a bug. It's a feature!
da.eXecutoR 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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-fortgeschrittene/72418-rechteverwaltung-mal-anders-beleuchtet.html, rechteverwaltung, php rechteverwaltung, rechteverwaltung domäne, php gruppenverwaltung, domain rechte windows verwalten berechtigungskonzept 2010, login php rechteverwaltung, php gruppen verwaltung, rollen berechtigungen verwalten, php rollen gruppen, php rechte verwaltung login, rechteverwaltung in php, php rechte verwaltung, aktionsberechtigung wiki, login php mit gruppen, php rechteverwaltung gruppen für forum, rechteverwaltung php, rollenverteilung und rechteverwaltung php, \rechteverwaltung in php, php: rollenbasiertes login

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:34 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