CakePHP检查或添加用户ID到帖子

时间:2011-10-09 10:10:52

标签: php cakephp

我的控制器中有以下两个操作:

function add()
    {
        if (!empty($this->data))
        {
            if ($this->Favour->save($this->data))
            {
                $this->Session->setFlash('Your favour has been saved.');
                $this->redirect(array('controller'=>'favours','action'=>'index'));
            }
        }
    }

    function edit($id = null)
    {
        $this->Favour->id = $id;
        if (empty($this->data))
        {
            $this->data = $this->Favour->read();
        }
        else
        {
            if ($this->Favour->save($this->data))
            {
                $this->Session->setFlash('Your favour has been updated.');
                $this->redirect(array('controller'=>'favours','action'=>'index'));
            }
        }
    }

1)我希望能够将登录的用户ID添加到添加操作中,以便使用该用户作为其作者ID创建新帖子(他们是该用户的外键)数据库表)。我不确定如何与控制器本身内的字段进行对话。

2)对于编辑操作,我想制作它,以便只有作者可以编辑帖子,例如用户200创建帖子20但用户100无法编辑此帖子,因为他的ID是不是200!我没有为我的应用程序使用ACL,只是简单的身份验证。

我考虑过在动作中做一个简单的if语句,如:

function edit($id = null)
    {
        $this->Favour->id = $id;
        $this->Favour->user_id = $user_id;

        if($this->Auth->user('id') != $user_id)
        {
            $this->Session->setFlash('You do not have permission to edit that favour!');
            $this->redirect(array('controller'=>'favours','action'=>'index'));
        }
        else
        {
            if (empty($this->data))
            {
                $this->data = $this->Favour->read();
            }
            else
            {
                if ($this->Favour->save($this->data))
                {
                    $this->Session->setFlash('Your favour has been updated.');
                    $this->redirect(array('controller'=>'favours','action'=>'index'));
                }
            }
        }

这是正确的吗? 但我如何从帮助中获取用户ID?

2 个答案:

答案 0 :(得分:2)

function add() {
    if (!empty($this->data)) {
        $this->data['Favour']['user_id'] = $this->Auth->user('id');
        if ($this->Favour->save($this->data)) {
            //etc

此代码假定:

  • 您的用户已登录
  • 用户可以访问add功能
  • 您正在id
  • 字段中存储已登录用户的id
  • Favours表中有一个名为user_id的外键与用户的数据类型id匹配

至于编辑;实现它的几种方式。 我会这样做:

function edit($id) {
    $this->Favour->id = $id;
    $favour_author = $this->Favour->field('user_id'); 
    // get the user of this post

    if($this->Auth->user('id') != $favour_author) {
        $this->Session->setFlash('You do not own this post.');
        $this->redirect('/someplace');
    }

    if (empty($this->data)) {
        $this->data = $this->Favour->read();
    }
        // carry on.

答案 1 :(得分:0)

如果您使用Auth Component,则可以在控制器中的$ this-> Auth-> user()中访问登录的用户记录。所以要访问id:$ this-> Auth-> user('id')。如果您编写自己的身份验证,则由您决定。

how to talk to fields within the controller itself.

你是什么意思?