AccessControl

Hi Leutz,

ich hab da mal ne frage zu den Accessrules





/**

	 * Specifies the access control rules.

	 * This method is used by the 'accessControl' filter.

	 * @return array access control rules

	 */

	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'list' and 'show' actions

				'actions'=>array('list','show'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array('sebi'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}




Und zwar würde ich gerne statt ‘users’ => array(‘sebi’)

‘roles’ => array(‘developer’, ‘admin’ … usw. )

dort verwenden, nur weis ich jetzt nicht wie yii das ganze verarbeitet,

wie sage ich yii denn das der user in der role admin drin ist?

Geht das auf diesem Weg überhaupt?

Und dann würde ich gerne diesen Link hier verstecken wenn der user

nicht in der role ist die in den accessRules drin steht

array(‘label’=>‘Posts verwalten’, ‘url’=>array(’/post/admin’))

der link befindet sich in der main.php(layouts)

und ich würde am liebsten von dort aus auf post.accessRules

zugreifen.

Wie gehe ich sowas jetzt am besten an?

Wie löst ihr soetwas?

gruß

sebi

Ok ich hab das jetzt erstmal so gelöst:




public function accessRules()

	{

		if(Yii::app()->user->checkAccess('admin'))

			$allow = Yii::app()->user->CurrentUser['loginname'];

		else

			$allow = '';

		return array(

			array('allow',  // allow all users to perform 'list' and 'show' actions

				'actions'=>array('list','show', 'grant'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array($allow),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}




irgendwelche einwende oder verbesserungsvorschläge?

Ok jetzt funzt das erstmal so halb,

kann mir trotzdem mal wer erklären wie yii das intern handled?

Achso und wie bekomme ich eigentlich raus ob der user besitzer des items ist?

Muss ich trotzdem jedesmal die userId mit der itemId vergleichen, oder geht das auch

kürzer?

Hi,

auch wenn man fallweise mit Kanonen auf Spatzen schießt:

Schau dir mal http://www.yiiframework.com/extension/srbac/ an. Zu der Extension gibt es auch ein ganz nettes Demo. Damit kannst du sehr bequem die "Rollenbasierte Zugriffskontrolle" http://www.yiiframework.com/doc/guide/de/topics.auth von Yii konfigurieren.

In den accessRules legt du dann fest, welches Authorisierungelement Zugriff hat. Dabei ist "roles" etwas irreführend. Tatsächlich kann es jedes x-beliebige Authorisierungelement sein, also "role", "task" oder "operation".


	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'list' and 'show' actions

				'actions'=>array('list','show'),

				'roles'=>array('View Post'),

			),

			array('allow',

				'actions'=>array('create'),

				'roles'=>array('Create Post'),

			),

			array('allow',

				'actions'=>array('update'),

				'roles'=>array('Edit Post'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'roles'=>array('Admin Post'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}

Allerdings läuft das nur, wenn die Benutzerdaten in einer Datenbank gespeichert sind.

Grüße

Carsten

Jo des srbac hab ich schon gesehen, allerdings ist das noch ziemlich beta und bis jetzt

werde ich nur mit fehlermeldungen zugeworfen wenn ich es installieren will.

Edit: Okay soweit hab ich das jetzt gerafft, hab jetzt aber noch Probleme beim

installieren von srbac aber dazu hab ich schon was in das extension Forum geschrieben.