您的位置:首页 > 编程语言 > PHP开发

Yii2.0中基于AccessControl的权限相关验证统一管理

2017-02-13 15:35 232 查看

Yii2.0中基于AccessControl的权限相关验证统一管理

编写一个统一的BaseController将所有的验证操作放在此控制器的beforeAction和behaviors中进行,然后将将所有需要用到验证的控制器继承这个控制器;并在需要验证和用户分组权限相关的配置放到特定的参数中即可!如下是本人写的一段简单的demo:

BaseController
```class BaseController extends Controller{
/**
* 验证模块
* @var array
*/

public $notlogin_validates = [];//不需登录匹配的
public $all_id_validates = [];//所有匹配的用户
public $post_validates = [];//需要post请求的
public $all = [];//所有匹配的用户
public $not_login = [];//不需登录的
public $post = [];//需要post请求的

/**
* 用户分组权限
* @var array
*/
public $group = [];

public $check = false;

public function beforeAction($action){
if(!empty($action->controller->notlogin_validates)){
$this->not_login = [
'actions' => $action->controller->notlogin_validates,
'allow' => true,
];
}
if(!empty($action->controller->all_id_validates)){
$this->all =  [
'actions' => $action->controller->all_id_validates,
'allow' => true,
'roles' => ['@'],
];
}
if(!empty($action->controller->post_validates)){
$this->post = [
'actions'=>$action->controller->post_validates,
'allow' => true,
'verbs' => ['post'],
];
}

$user = Yii::$app->user;
$group = explode(",",$user->identity->group);

if(count($group) > 1){
foreach ($group as $k=>$v){
$this->check = $this->check || in_array($v,$this->group);
}
}elseif (count($group) == 1 && $group[0] == 0){
$this->check = true;
}else{
$this->check = false;
}

return parent::beforeAction($action); // TODO: Change the autogenerated stub
}

public function behaviors(){
if(!$this->check){
throw new Exception('无权访问!');
}
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [$this->not_login,$this->all, $this->post],
],
];
}

然后就是在自己的控制器内继承这个控制器如下:

<div class="se-preview-section-delimiter"></div>


TestController

“`

class TestController extends BaseController{

public enableCsrfValidation=false;publicall_id_validates = [‘index’];

public notmatchvalidates=[‘@′];publicgroup = [‘0’,’4’];

public function actionIndex(){

}
}


写的较为粗糙请多指教!

TestController


class TestController extends BaseController{
public  $enableCsrfValidation = false;
public $all_id_validates = ['index'];
public $notmatch_validates = ['@'];
public $group = ['0','4'];

public function actionIndex(){

}
}


写的较为粗糙请多指教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yii 继承 class