文中代码已上传至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上面直接拉取代码。
git:https://github.com/LeeToug/CtlAct