文中代碼已上傳至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上面直接拉取代碼。