Реализация RBAC в рамках Yii - PullRequest
       1

Реализация RBAC в рамках Yii

2 голосов
/ 13 сентября 2011

Я пытаюсь применить простую иерархическую структуру пользователя (например, super-admin, admin, user) в моем веб-приложении Yii. Могу ли я сделать это, используя AccessControl Yii по умолчанию, или это требуется для реализации в Rbac.

1 Ответ

6 голосов
/ 13 сентября 2011

Вы можете сделать это, используя стандартное управление доступом Yii по умолчанию.

Что я обычно делаю, когда не использую RBAC, - это создание поля в базе данных пользователей ACL, которое содержит значения, например.Admin, Super Admin и т. Д., А затем, войдя в систему, я назначаю ее переменной сеанса пользователя Yii :: app () - в файле componentetnst / UserIdentity.php «Notice $this->setState('accessCode',$user->accessCode);»

class UserIdentity extends CUserIdentity
{
        private $_id;

    public function authenticate()
    {
            $username=strtolower($this->username);

            $user=Users::model()->find('LOWER(userName)=?',array($username));

            if($user===null)
                $this->errorCode=self::ERROR_USERNAME_INVALID;
            else if(!$user->validatePassword($this->password))
                $this->errorCode=self::ERROR_PASSWORD_INVALID;
            else
            {
                $this->_id=$user->u_id;
                $this->username=$user->userName;

                $this->setState('accessCode',$user->accessCode);
                $this->setState('userName',$this->username);
        $this->setState('id',$this->_id);
        $this->setState('accessCode',$user->accessCode);
                $this->errorCode=self::ERROR_NONE;
            }
            return $this->errorCode==self::ERROR_NONE;

    }

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

}

Нет в моих контроллерахУ меня есть что-то вроде

public function accessRules()
    {
        return array(
            array('allow',  
                'actions'=>array('admin'),
                'expression'=>'Yii::app()->user->accessCode & 8',
            ),
            array('allow', 
                'actions'=>array('create','update'),
                'expression'=>'Yii::app()->user->accessCode & 1',
            ),
            array('allow', 
                'actions'=>array('view'),
                'expression'=>'Yii::app()->user->accessCode & 4',
            ),
                        array('allow', 
                'actions'=>array('delete'),
                'expression'=>'Yii::app()->user->accessCode & 2',
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

Обратите внимание, что выражение работает как оператор if

Надеюсь, это поможет

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