如何设置Yii中不同控制器的操作访问权限?

时间:2015-05-07 09:22:16

标签: php yii

这是我的访问规则:

public function accessRules() {



        $controllers = array(' '); $actions = array('index');

        if (Yii::app()->user->getState("State1") == true){ 
            array_push($controllers, 'cont1','cont2');
            array_push($actions, 'cont1funct1', 'cont1funct2');
        }
        if (Yii::app()->user->getState("State2") == true){ 
            array_push($controllers, 'cont1');
        }
        if (Yii::app()->user->getState("State3") == true){ 
            array_push($controllers, 'cont1');
            array_push($actions, 'cont1funct3','cont1funct4','cont1funct5','cont1funct6');
        }
        if (Yii::app()->user->getState("State4") == true){
            array_push($controllers, 'cont1');
        } 
        if (Yii::app()->user->getState("State5") == true){ D
            array_push($controllers, 'cont1');
        }
        if (Yii::app()->user->getState("State1") == false  && Yii::app()->user->getState("State2") == false && Yii::app()->user->getState("State3") == false  && Yii::app()->user->getState("State4") == false  && Yii::app()->user->getState("State5") == false){
            return array(
                array('deny', // deny all users
                    'users' => array('*'),
                ),
            );
        }else{
            $controllers = array_unique($controllers); //remove duplicates
            $actions = array_unique($actions);//remove duplicates
            return array(
                array('allow',
                    'controllers'=> $controllers,
                    'actions'    => $actions 
                ),
                array('deny', // deny all users
                    'users' => array('*'),
                ),
            );
        }
    }

让我们假设:

    Cont1 我的功能 cont1func1 cont1func2 Cont2 我的功能 cont2func1 cont2func2 cont2func3
  • Cont3 中的列表我的功能 cont3func1 cont3func2

我想为用户提供访问权限:

  • UserX cont1 和功能 cont1func1

  • UserY cont1 ,功能 cont1funct1 cont1func2 和功能的cont2 cont2func1 cont2func2 cont2func3

  • UserZ cont1 所有功能和 cont3 所有功能

我该怎么做?我如何定义我的行为? THX

更新:

  import logging
  logging.basicConfig(filename="logfile.txt")
  stderrLogger=logging.StreamHandler()
  stderrLogger.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
  logging.getLogger().addHandler(stderrLogger)

这就是我所取得的成就。但我不知道当我开始从另一个控制器添加功能时会发生什么。你可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

功能accessRules()应位于每个控制器内。所以这样的事情会有所帮助:

public function accessRules() {
       return array(
            array('allow',
                'actions'=>  array("create", "update", ...),
                'users'=>array("@")
            ),
            array('deny', // deny all users
                'users' => array('*'),
            ),
        );
}