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

You are viewing revision #7 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.

« previous (#6)

  1. Create a role manually
  2. Giving role
  3. Getting user role
  4. Making some actions public
  5. Getting all the roles

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)

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

$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

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

'import'=>array(
		
		'application.modules.rights.components.dataproviders.*',
		
	),

get all roles as a dropdown

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

7 0
13 followers
Viewed: 60 686 times
Version: Unknown (update)
Category: Tips
Written by: Rajith R
Last updated by: Rajith R
Created on: Feb 4, 2013
Last updated: 11 years ago
Update Article

Revisions

View all history

Related Articles