$command = Yii::app()->db->createCommand("SELECT * FROM `authassignment` WHERE userid={$user_id}"); $results = $command->queryAll(); $roles = array(); foreach ($results as $result) { $roles[] = $result['itemname']; } $this->setState('roles', $roles);
Tag: RBAC
Switch Yii layout based on user role
You can assign different layouts to different users using following filter class
1. Add LayoutFilter.php to your protected/components/ folder
class LayoutFilter extends CFilter { protected function preFilter($filterChain) { // logic being applied before the action is executed $roles = Yii::app()->user->getState('roles'); if (!is_array($roles)) $roles = array(); if (in_array(User::ROLE_ADMIN, $roles)) { $filterChain->controller->layout = 'admin/column2'; } else { $filterChain->controller->layout = '//layouts/column2'; } return parent::preFilter($filterChain); } protected function postFilter($filterChain) { // logic being applied after the action is executed return parent::postFilter($filterChain); } }
2. Update protected/components/Controller.php and add following filters
public function filters() { return array( 'rights', array('application.components.LayoutFilter'), ); }
3. Update all controllers and add following filters
public function filters() { return parent::filters() + array( 'postOnly + delete', // we only allow deletion via POST request ); }