如何查看仅由用户制作的数据?

时间:2014-01-17 07:54:43

标签: php yii

我创建了一个链接,它应该做的是带我到显示我发布的所有公告的页面,但它会显示数据库中的所有公告。

这是我的链接:

  <a class="more" href="<?php echo Yii::app()->createUrl('announcement')?>" ><?php switch_lang('View Announcements', '查看更多', FALSE)?></a>

这是actionView()公告的控制器:

public function actionView()     {

    $post=$this->loadModel();
    if(Persons::model()->compare_country(explode("|",$post->country)))
    {
        $post->view_count = $post->view_count + 1;
        Yii::app()->db->createCommand("UPDATE content SET view_count = {$post->view_count} WHERE id = {$post->id}")->execute();
        //$post->save();
        $comment=$this->newComment($post, 'view');

        if (!empty(Yii::app()->session['announcement_message']))
        {
            Yii::app()->user->setFlash('message',Yii::app()->session['announcement_message']);
            Yii::app()->session['announcement_message'] = null;
        }

        $this->render('view',array(
            'model'=>$post,
            'comment'=>$comment,
            'view'=>'view',
        ));
    }
    else
    {
        $this->redirect(Yii::app()->createAbsoluteUrl('news/index',array('page'=>'1')));
    }
}

1 个答案:

答案 0 :(得分:1)

Yii在其访问控制实现中支持数据所有者的概念。

在您自己的应用程序中实现此操作的第一步是指示控制器启用此规则。这是通过覆盖 filters()函数来完成的。

class ContentController extends Controller {

    public function filters() {
        return array(
            'accessControl'
        );
    }

    public function accessRules() {
    }
}

'accessControl'标志指定访问控制应用于数据管理。实际业务规则在 accessRules()函数中定义,并指定将被评估以提供所需控件的访问控制表达式。函数实现的例子是。

public function accessRules() {
    return array(
        array('allow', // allow all users to perform 'index' and 'view' actions
            'actions' => array('view'),
            'users' => array('*'),
        ),
        array('allow', // allow authenticated user to perform 'add' action
            'actions' => array('add'),
            'users' => array('@'),
        ),
        array('allow', // allow only the owner to perform 'modify' 'delete' actions
            'actions' => array('modify', 'delete'),
            'expression' => array('ContentController','isMyRecord')
        ),
        array('deny', // deny all users
            'users' => array('*'),
        ),
    );
}

isMyRecord是一个将运行的方法,返回true或false以指示是否应该允许该操作。

public function isMyRecord(){
    $content_id = $_GET["content_id"];
    $person = Example::model()->findByPk($content_id); 
    if ($example->owner_id === Yii::app()->user->id)
       return true;
    else
       return false;
}