You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.9 KiB
88 lines
1.9 KiB
<?php
|
|
namespace app\admin\controller\v1;
|
|
|
|
use app\api\ApiController;
|
|
use think\facade\Db;
|
|
|
|
class Right extends ApiController
|
|
{
|
|
public function getTree()
|
|
{
|
|
|
|
$data=[
|
|
'title'=>'所有權限',
|
|
'key'=>'all',
|
|
'level'=>0,
|
|
'index'=>0
|
|
];
|
|
|
|
$data=$this->buildTree($data);
|
|
|
|
|
|
if(!$data){
|
|
$result=[];
|
|
}
|
|
|
|
// $result['children']=$children;
|
|
|
|
|
|
$rtn=[
|
|
// 'total' => $total,
|
|
$data
|
|
];
|
|
|
|
return $this->Success($rtn);
|
|
}
|
|
|
|
private static function buildTree($data,$level=0){
|
|
$level=$level+1;
|
|
$menu = Db::name('menu')
|
|
->where('pid',$data['index'])
|
|
->select();
|
|
|
|
if(!$menu){
|
|
return $data;
|
|
}
|
|
|
|
$children=[];
|
|
|
|
foreach($menu as $key => $val){
|
|
$children[$key]['title']=$val['title'];
|
|
$children[$key]['index']=$val['id'];
|
|
$children[$key]['level']=$level;
|
|
$children[$key]['key']=$val['node'];
|
|
if($level < 2){
|
|
$children[$key]=self::buildTree($children[$key],$level);
|
|
}else{
|
|
$children[$key]=self::appendPermission($children[$key]);
|
|
}
|
|
}
|
|
if($children){
|
|
$data['children'] = $children;
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
private static function appendPermission($data){
|
|
$perm = Db::name('permission')
|
|
->where('menu_id',$data['index'])
|
|
->select();
|
|
|
|
if(!$perm){
|
|
return $data;
|
|
}
|
|
|
|
$children=[];
|
|
|
|
foreach($perm as $key => $val){
|
|
$children[$key]['title']=lang($val['code']);
|
|
$children[$key]['index']=$val['id'];
|
|
$children[$key]['key']=$val['code'];
|
|
}
|
|
if($children){
|
|
$data['children'] = $children;
|
|
}
|
|
return $data;
|
|
}
|
|
}
|