Yii Framework Forum: RBAC checkAccess ignoriert bizRule - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

RBAC checkAccess ignoriert bizRule Rate Topic: -----

#1 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 29 July 2012 - 05:45 AM

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?
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#2 User is offline   zeroByte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 17-February 12

Posted 29 July 2012 - 05:55 AM

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
0

#3 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 29 July 2012 - 06:19 AM

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
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#4 User is offline   zeroByte 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 17-February 12

Posted 29 July 2012 - 07:05 AM

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
0

#5 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 29 July 2012 - 11:49 AM

cool
Danke!!!

http://www.yiiframew.../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');
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users