CakePHP проверить или добавить идентификатор пользователя в сообщения - PullRequest
0 голосов
/ 09 октября 2011

В моем контроллере есть два следующих действия:

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) Я хочу иметь возможность добавить идентификатор пользователя, вошедшего в систему, в действие add, чтобы новыйpost создается с этим пользователем в качестве идентификатора автора (это внешний ключ в таблице db).Я не уверен, как разговаривать с полями в самом контроллере.

2) А для действия редактирования я хочу сделать так, чтобы редактировать пост мог только автор.Например, пользователь 200 создает сообщение 20, но пользователь 100 не может редактировать это сообщение, поскольку его идентификатор не равен 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'));
                }
            }
        }

Было бы это правильно? НО как мне получить идентификатор пользователя из услуги?

Ответы [ 2 ]

2 голосов
/ 09 октября 2011
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.
0 голосов
/ 09 октября 2011

Если вы используете Auth Component, вы можете получить доступ к зарегистрированной записи пользователя в $ this-> Auth-> user () в контроллере. Итак, чтобы получить доступ к идентификатору: $ this-> Auth-> user ('id'). Если вы пишете собственную аутентификацию, вам решать.

how to talk to fields within the controller itself.

Что ты имеешь в виду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...