yii rights и business rules

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
NeverDie
Сообщения: 70
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

yii rights и business rules

Сообщение NeverDie »

Здравствуйте! Разбираю yii rights. Хочу дать возможность зарегистрированным пользователям (Authenticated) редактировать свои посты. Есть таблица explanation, имя поля в ней, которое отвечает за id пользователей - user_id. В админке сделал для Authenticated операцию Explanation.Update. В поле для бизнес правил пишу строку:

Код: Выделить всё

return Yii::app()->user->id==$params['explanation']->user_id; 
Но почему-то доступ все равно остается запрещен. В чем может быть ошибка ?
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: yii rights и business rules

Сообщение Ghost_nsk »

с твоей задачей намного легче справиться, если поколдовать над UserIdentity (в папке components).
Например вот так:

Код: Выделить всё


// аутентификация юзера
class UserIdentity extends CUserIdentity {

    // аутентификация
    public function authenticate() {
        // Вход обычного юзера
        $user = Profile::model()->find('LOWER(login)=?', array($this->username));
        if ($user === null)
            $this->errorCode = self::ERROR_USERNAME_INVALID;
        else if ($user->pass !== $this->password)
            $this->errorCode = self::ERROR_PASSWORD_INVALID;
        else {
            $this->errorCode = self::ERROR_NONE;
            $this->setState('user_id', $user->id);       
            $this->setState('userName', $this->username);            
        };
        return !$this->errorCode;
    }
}
 


Потом в нужном контроллере вытаскиваешь user_id через $this->getState('user_id') и апдейтишь посты, к которым привязан user_id
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: yii rights и business rules

Сообщение Ghost_nsk »

NeverDie писал(а): Но почему-то доступ все равно остается запрещен. В чем может быть ошибка ?
А доступ запрещен, потому что у тебя в контроллере в методе rules к экшену редактирования надо прописать доступ авторизованным пользователям:

Код: Выделить всё

    public function accessRules() {
        return array(
            array('allow',
                'users' => array('admin'),
            ),            
            array('allow', // allow authenticated users to perform any action
                'actions' => array('Название экшена где юзеры редактируют посты'),
                'users' => array('@'),
            ),
            array('deny', // deny all users
                'users' => array('*'),
            ),
        );
    }
Hett
Сообщения: 127
Зарегистрирован: 2011.04.25, 07:18

Re: yii rights и business rules

Сообщение Hett »

А не проще ли тогда getId() переписать?
Hett
Сообщения: 127
Зарегистрирован: 2011.04.25, 07:18

Re: yii rights и business rules

Сообщение Hett »

Код: Выделить всё

class UserIdentity extends CUserIdentity
{
    protected $_id;

    public function authenticate()
    {
        /**
         * @var User $user
         */

        if($id) {
            $user = User::model()->findByPk($id);
        } else {
            $this->username = User::phoneNumberFormat($this->username);
            $user = User::model()->find('email = :u OR phone1 = :u', array('u'=>$this->username));
        }

        if(is_null($user)) {
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        } else if($user->password !== sha1($this->password)) {
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        } else {
            $this->errorCode=self::ERROR_NONE;
            $this->_id = $user->id;
        }

        return !$this->errorCode;
    }

    public function getId()
    {
        return $this->_id;
    }

} 
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: yii rights и business rules

Сообщение Ghost_nsk »

Hett писал(а):А не проще ли тогда getId() переписать?
кстати вариант, а ты не в курсе, этот метод сработает, если чел зайдет на сайт на следующий день?
по идее getState как раз из кукисов в этом случае вытаскивает

P.S. ну если конечно autoLogin = true стоит
Ответить