RBAC checkAccess ignoriert bizRule

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?

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




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

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

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’);