You can assign different layouts to different users using following filter classSwitch Yii layout based on user role
Last modified
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
);
}
5 min read