Assigning dynamic roles to a user Using yii Rights module at the time of user creation and using some special advanced features of yii rights

unchanged

Category

Tips

unchanged

Tags

user, user management, rights, roles, Role based access control, role

unchanged

Content

After Installing Yii Users and Rights to Newly Created Yii app we have to assign
dynamic roles to a user at the time of user creation .
Create a role manually
------------------
first we have to create a role manually and add some operations and/or tasks to
the role according to the needs
assume the role created was 'clients'
Giving role
------------------
This is very simple , achieved by using two lines of code
save the user(assume $model->id is the user saved/created)
~~~
[php]
//assign role
$authorizer = Yii::app()->getModule("rights")->getAuthorizer();
$authorizer->authManager->assign('clients', $model->id);
~~~
Getting user role
------------------
This is also very simple
the signed user id will get using Yii::app()->user->Id
~~~
[php]
$roles=Rights::getAssignedRoles(Yii::app()->user->Id); // check for single
role
foreach($roles as $role)
if($role->name == 'clients')
{
//some actions here ..
$this->redirect(array('/mailbox'));
}
~~~
Making some actions public
------------------
this should be a common need of an app.
this is also very simple when using yii rights
just use a '-' (minus) operator like
~~~
[php]
public function filters()
{
return array(
'rights - publicprofile', // perform access control for CRUD
operations
);
}
~~~
here the publicprofile action is public, all other actions in the same
controller are under rights.
Getting all the roles
------------------
getting all the roles in the application
put this line in protected/config/main
~~~
[php]
'import'=>array(
'application.modules.rights.components.dataproviders.*',
),
~~~
get all roles as a dropdown
~~~
[php]
<?php
if (Yii::app()->user->isSuperuser) {
$all_roles=new RAuthItemDataProvider('roles', array(
'type'=>2,
));
$data=$all_roles->fetchData();
?>
<div>
<label for="type_id">Type</label>
<?php echo
CHtml::dropDownList("Type",'',CHtml::listData($data,'name','name'));?>
</div>
<?php
}
?>
~~~
Thank you Chris for the awesome module. and thanks mishamx.