how to get Current role name

Hi,

how to get RBAC current role name

i tried :

<?php

$role = Yii::app()->authManager->getRoles(Yii::app()->user->id);

echo "<br /><h1>" . $role->itemname . "</h1>";

?>

but not work, return array

thanks

If it returns an array, then it works. ;)

it return :

Array ( [deletePost] => CAuthItem Object ( [_auth:private] => CDbAuthManager Object ( [connectionID] => db [itemTable] => AuthItem [itemChildTable] => AuthItemChild [assignmentTable] => AuthAssignment [db] => CDbConnection Object ( [connectionString] => mysql:host=localhost

how to get "deletePost" String in this array

when i try :

echo $role->itemname

not works

you could write a getRole in your user model




public function getRole() 

{

        $role = Yii::app()->db->createCommand()

		->select('itemname')

		->from('AuthAssignment')

		->where('userid=:id', array(':id'=>$this->id))

		->queryScalar();


	return $role;

}



I found a direct query to be the easiest way to get a user’s role.

Hi jpm, thanks for reply

i call this method from views/layout/main.php

$q = Users::model();

echo $q->getRole();

return empty

wether AuthAsignment table must have class in model ?

No this has nothing to do of having a model. It is a direct command to database. Do that select statement inside the db. Does it work?

‘getRoles’ returns an array, obviously:

http://www.yiiframework.com/doc/api/1.1/CAuthManager#getRoles-detail

It returns an associative array in this form: [color=#222222][font=Arial, sans-serif][size=2]name=>CAuthItem[/size][/font][/color]

Why do you need it?

Wouldn’t CWebUser::checkAccess(‘deletePost’) work?

hi jacmoe,

how to get this name name=>CAuthItem from $role = Yii::app()->authManager->getRoles(Yii::app()->user->id);

i need it for global variable in each page

<div id="role-name"><?php echo $roleName?></div>

if i write all of rolename

if(checkAccess(‘deletePost’)){

$roleName = ‘deletePost’;

}else if(checkAccess(‘readPost’)){

$roleName = ‘readPost’;

}

it will spend alot of code

Thanks

The query I wrote will only work if you have a record already loaded. in the code above you are not loading a record from the database.




$q = Users::model()->findByPk(1);

echo $q->getRole();



should give you the role of the user with the primary key of 1, assuming you have assigned a role to that user.

Hi jpm thank you very much




$q = Users::model()->findByPk(Yii::app()->user->id);

			echo $q->getRole();



it Works fine

[SOLVED ]


roles=Yii::app()->authManager->getRoles(Yii::app()->user->id);


foreach (roles as $role)

{

    echo $role->name;

}