Hey, i’m new to yii and in my project after login i should redirect to manage page and based on the role (ie. admin and user) he should see custom views for cgridview.
for admin he should see all entries made by user.
for user he should see only his entries.
thnx for any help in advance!
Hi,
It is easy to achieve
goto your search method inside model
if(!Yii::app()->user->isAdmin()) {
$ids = array();
$list = Yii::app()->db->createCommand()->select('id')->from('tbl_entries')
->where('user_id = :userId', array(':userId' => Yii::app()->user->id))->queryAll();
foreach($list as $i=>$row) {
$ids[] = $row['id'];
}
$criteria->addInCondition('id', $ids);
}else {
$list = Yii::app()->db->createCommand()->select('id')->from('tbl_entries')->queryAll();
foreach($list as $i=>$row) {
$ids[] = $row['id'];
}
$criteria->addInCondition('id', $ids);
}
Explanation:
If you are not admin
get the records only belong to logged in user
if you are admin
getallrecords belongs to all users
Another way to direct filter userwise listing form CGridView
Add below code in View file:
<?php
$useriId = '';
if(!Yii::app()->user->isAdmin()) {
$useriId = Yii::app()->user->id;
}
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'model-grid',
'dataProvider'=>$model->search($useriId),
Make changes in Model file for Search method:
public function search($useriId = '')
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
if ($useriId != '') {
$criteria->condition = 't.user_id = ' . $useriId;
}
Hope this helps!