Anfänger: Authentifizierung / Gruppen

Hallo Leute,

ich bin neu zu Yii gestossen. Da ich vorher nichts mit MVC/Frameworks zu tun hatte, sondern meine PHP-Projekte immer von 0 auf gecoded hab, stoss ich bei einigen Sachen an - ich erlaube mir deshalb hier nach Hilfe zu fragen.

Aktuell kämpf ich mit User-Berechtigungen. Folgendes Szenario:

Ich hab 4 Gruppen in einer Tabelle: ID 1 = Admin, 2 = Mods, 3 = VIP, 4 = User.

Für alle User hab ich eine Tabelle User, entsprechend related. Soweit, so gut.

Ich hab auch ein Admin-Modul erstellt, darauf haben alle ab Level VIP Zugriff (Also Mods und Admins auch). Zudem hab ich über den Gii ein User-Modul & CRUD innerhalb vom Modul Admin erstellt.

Nun möchte ich eine Userverwaltung im Admin einbauen, mit der Begrenzung dass der jeweilige User nur auf die Daten der tieferen Gruppen Zugriff hat. Sprich ein VIP kann User editieren, der Mod kann VIP und User editieren etc.

Jetzt steh ich ein bisschen am Berg und suche nach der besten Vorgehensweise…

Im admin-view hab ich zBsp. folgendes beim CGridView eingetragen:


array(

'name'=>'group_id',   

'value'=>'$data->group->name',

'filter' => CHtml::listData(Group::model()->findAll('id > '.Yii::app()->user->group),'id','name'),

                  ),

Funktioniert - nur die ‘berechtigten’ Records werden angezeigt. Nur kann dann natürlich jemand auf der Update-Seite die ID in der URL anpassen. Ich könnte zwar überall diese Checks reinmachen, nur wird das dann auch sehr schnell unübersichtlich…

Was wäre denn hier die beste Vorgehensweise?

Vielen Dank ;)

TheD

Ich empfehle ein rollenbasiertes Zugriffssystem.

http://www.yiiframework.com/doc/guide/1.1/de/topics.auth

Siehe dazu Punkt 6. Rollenbasierte Zugriffskontrolle

Das ist aktiv - somit kann ich dem normalen User die Admin-Fähigkeit verwehren - was auch ok ist.

Wo ich aber nach dem besten Weg suche, ist zu verhindern dass ein VIP einen MOD editieren kann.

RBAC - geht das einfach

such einmal nach der extension SRBAC

RBAC hatte ich schon vor dem ersten Post installiert, Rights, SRBAC und Co. ein paar Tage später. Aber eine schlaue Doku v.a. für die "Business Rules" hab ich nicht gefunden.

Aber da es ja so einfach geht, frag ich mal Frech nach einer genauen Lösung resp. Vorgehensweise für diese Anforderung:

Tabelle "EditMe" mit u.A. Feld "Test".

User X -> darf den Datensatz editieren wenn im Feld "Test" ne 1 drinsteht

User Y -> darf den Datensatz editieren wenn im Feld "Test" ne 1 oder 2 drinsteht

User Y darf Feld "Test" ebenfalls ändern, User X nicht.

Bonus: Im Index werden nur die Datensätze angezeigt die Editierbar sein dürfen

Antwort bitte nicht bestehend nur aus “mit RBAC” :D

Danke




$bizRule='return ($params["test"]===1) or ($params["test"]===2);';



Wenn du deinem Benutzer über den ‘CAuthManager’ deine vorgegebenen Rollen zuweist, gibst du die entsprechende BusinessRule einfach mit. So weiß später dein ‘checkAccess’ ob der Benutzer die Berechtigung hat oder nicht.




$test   = 1;

$params = array('test'=>$test);

if(Yii::app()->user->checkAccess('editData',$params)){

    //weiter mit der Logik...

}



Solltest du mehr Informationen dazu suchen -> in dem Buch "Agile Web Application Development with Yii 1.1 and PHP5" befindet sich eine ganz gute Erklärung.