yii
(jammi )
July 29, 2012, 10:45am
1
Hi,
ich baue soeben mein erstes RBAC und stolpere bei den bizRules.
$oAuth = Yii::app()->authManager;
$oAuth->createOperation('createFlashcard', 'Erstellen');
$oAuth->createOperation('readFlashcard', 'Lesen');
$oAuth->createOperation('updateFlashcard', 'Bearbeiten');
$oAuth->createOperation('deleteFlashcard', 'DELETE');
$oRole = $oAuth->createRole('loggedUser');
$oRole->addChild('createFlashcard');
$oRole->addChild('readFlashcard');
$oRole->addChild('updateFlashcard');
$bizRule = 'return Yii::app()->user->id==$params["flashcard"]->user_id;';
$oTask = $oAuth->createTask('updateOwnFlashcard','Eigene bearbeiten',$bizRule);
$oTask->addChild('updateFlashcard');
$oAuth->assign('loggedUser','1');
$params = array('flashcard'=>$oFlashcard);
//if( Yii::app()->user->checkAccess('updateOwnFlashcard',$params))
if( Yii::app()->user->checkAccess('updateFlashcard',$params))
{
echo "IS OK";
}
else
{
echo "DARFST DAS NICHT";
}
exit();
Wenn ich den Code wie oben lasse, dann erhalte ich folgendes:
echo Yii::app()->user->id; ==> 1
echo $params[‘flashcard’]->user_id; ==> 2
Return: "IS OK";
echo Yii::app()->user->id; ==> 1
echo $params[‘flashcard’]->user_id; ==> 1
Return: "IS OK";
Wenn ich
if( Yii::app()->user->checkAccess('updateOwnFlashcard',$params))
Dann funktioniert es garnicht.
Kann sich das jemand erklären?
zeroByte
(Dispyfree)
July 29, 2012, 10:55am
2
Moin,
ich arbeite nicht mit RBAC, aber wenn man in das Interface IAuthManager guckt, ist da die Rede von der "Operation" als ersten Parameter - "updateOwnFlashCart" ist bei dir jedoch ein "Task".
So wie ich das sehe, reicht es bei dir völlig aus, nur "updateFlashChart" zu prüfen - da die Business-Rule des Tasks da mit berücksichtigt wird.
MfG
yii
(jammi )
July 29, 2012, 11:19am
3
if( Yii::app()->user->checkAccess('updateFlashcard',$params))
Das Problem ist jedoch, dass diese Regel für den falschen User ein "OK" liefert.
Yii::app()->user->id; ist 2
$params[‘flashcard’]->user_id; ist 1
hier liefert mir die Bedingung TRUE
zeroByte
(Dispyfree)
July 29, 2012, 12:05pm
4
hiermit: $oAuth->assign(‘loggedUser’,‘1’); weist du dem Nutzer die Rolle “loggedUser” zu, womit er in Verbindung mit $oRole->addChild(‘updateFlashcard’); automatisch die Operation “updatedFlashCard” ausführen darf, unabhängig von der Business-Rule.
Business-Rules ergänzen RBAC nur; Rechte, die auch ohne sie existieren, bleiben weiterhin gültig.
MfG
yii
(jammi )
July 29, 2012, 4:49pm
5
cool
Danke!!!
http://www.yiiframework.com/doc/guide/1.1/en/topics.auth
Ich hatte eine falsche Reihenfolge eingebaut.
Ich habe meine Rechte grad wie folgt geändert und es funktioniert.
$oRole = $oAuth->createRole('loggedUser');
$oRole->addChild('updateOwnFlashcard');
$oAuth->assign('loggedUser','1');
Dem Admin weise ich nun das folgende Recht zu:
$oRole->addChild(‘updateFlashcard’);