文中代码已上传至github,需要的同学自行拉取:https://github.com/LeeToug/CtlAct
如果你觉得拉取麻烦的话,可直接使用composer require ctlacl/ctlact命令加载到你的项目中使用!!!
前几天我写的一个thinkphp5的项目需要配备权限系统,考虑到乱七八糟的各种问题,最后定了一个思路:
将当前项目中所有的控制器与方法全部获取,然后加入到权限系统中去,当然,中间还需要有一些过滤的操作,然后将获取到的控制器与方法入库,然后在给不同的角色配置相应的权限即可!
这里我主要将获取控制器与获取方法的代码写一下,避免后面会先重复造轮子的情况。
1.获取当前项目中所有的控制器
function getnewctl($path){
//查询**模块所有控制器
$pathList = glob($path. '/*.php');
foreach($pathList as $key => $value) {
$controllers[] = basename($value, '.php');
}
$cro_filter = ['Menu','Common','Base','Test','School','Login','index'];
$newctl = array_diff($controllers,$cro_filter);
return $newctl;
}
2.获取当前项目中所有的方法
function getaction($model,$controller,$filteraction=[]){
//需要过滤的action方法
$filter = ['_initialize','__construct','getValidate','getCode','beforeAction','fetch','display','assign','engine','validateFailException'
,'validate','success','error','result','redirect','getResponseType','test'];
//添加需要过滤的方法
if(!empty($filteraction)){
foreach ($filteraction as $va){
$filter[] = $va;
}
}
//找到所有action操作方法
$actions = array();
$actions[] = get_class_methods(\controller($model."/".$controller));
//过滤掉定义的操作方法
$attr = array();
foreach ($actions as $key=>$val){
foreach ($val as $v){
if(!in_array($v,$filter)){
$attr[] = $v;
}
}
}
return $attr;
}
后面的一些操作就简单了,这里我就不写了,有兴趣的同学可以留言或者在我的git上面直接拉取代码。