Yii Framework Forum: AccessControl - Yii Framework Forum

Jump to content

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

AccessControl Rate Topic: -----

#1 User is offline   sebi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 06-October 08

Posted 13 August 2009 - 08:48 AM

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
0

#2 User is offline   sebi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 06-October 08

Posted 13 August 2009 - 03:09 PM

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?
0

#3 User is offline   sebi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 06-October 08

Posted 13 August 2009 - 03:30 PM

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?
0

#4 User is offline   Anticon 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 25
  • Joined: 25-February 09
  • Location:Germany

Posted 14 August 2009 - 12:45 AM

Hi,

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

Schau dir mal http://www.yiiframew...xtension/srbac/ an. Zu der Extension gibt es auch ein ganz nettes Demo. Damit kannst du sehr bequem die "Rollenbasierte Zugriffskontrolle" http://www.yiiframew.../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
0

#5 User is offline   sebi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 06-October 08

Posted 14 August 2009 - 08:08 AM

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.
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