Как отфильтровать записи по роли пользователя в сетке пользователя?
Я использую расширение yii-user. Я могу показать роль пользователя в сетке пользователя / администратора, но могу ли я использовать этот фильтр? Вот мой взгляд:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name' => 'id',
'type'=>'raw',
'value' => 'CHtml::link(CHtml::encode($data->id),array("admin/update","id"=>$data->id))',
),
array(
'name' => 'username',
'type'=>'raw',
'value' => 'CHtml::link(UHtml::markSearch($data,"username"),array("admin/view","id"=>$data->id))',
),
array(
'name'=>'email',
'type'=>'raw',
'value'=>'CHtml::link(UHtml::markSearch($data,"email"), "mailto:".$data->email)',
),
'create_at',
'lastvisit_at',
/*array(
'name'=>'superuser',
'value'=>'User::itemAlias("AdminStatus",$data->superuser)',
'filter'=>User::itemAlias("AdminStatus"),
),*/
array(
'name'=>'status',
'value'=>'User::itemAlias("UserStatus",$data->status)',
'filter' => User::itemAlias("UserStatus"),
),
array(
//'name'=>'assignments',
'header'=>Rights::t('core', 'Roles'),
'type'=>'raw',
'value'=>function($data) {
$roles = Rights::getAssignedRoles($data->id);
foreach($roles as $role){
$user_role=$role->name;
}
return $user_role;
}
),
array(
'class'=>'CButtonColumn',
'template'=>'{view}{delete}'
),
),
));
Вы можете добавить фильтр, как показано ниже:
array(
//'name'=>'assignments',
'header'=>Rights::t('core', 'Roles'),
'type'=>'raw',
'filter'=>CHtml::listData(Rights::model()->findAll(),'id','name'), //***
'value'=>function($data) {
$roles = Rights::getAssignedRoles($data->id);
foreach($roles as $role){
$user_role=$role->name;
}
return $user_role;
}
),
Я предположил, что Rights
является моделью и играет на ней роли с id
,name
,
По линии, которую я указал, что с ***
в комментариях Yii сгенерирует раскрывающийся список в виде фильтра, в котором имя роли отображается в качестве значения параметра, а идентификатор роли — в качестве значения параметра.
Других решений пока нет …