普通的数据递归
public static function getTree($data,$pid=0)
{
$node = [];
foreach ($data as $v){
if($v['pid']==$pid){//父级id
$v['child'] = self::getTree($data,$v['id']);
$node[] = $v;
}
}
return $node;
}
数据前端加特殊符号的递归
public static function getTree($data,$pid=0,$level=0)
{
$html = '--';
static $arr = [];
foreach ($data as $item){
if($item['pid']==$pid){
$item['html'] = str_repeat($html,$level*2);
$item['level'] = $level+1;
$arr[] = $item;
$this->getTree($data,$item['id'],$item['level']);
}
}
return $arr;
}
laravel中间件权限判断 larave8为例
public function handle(Request $request, Closure $next)
{
if(!auth()->check()){
return redirect(route('admin.login'));
}
$route = session('admin.route');//从缓存里取出权限
$routes = array_merge($route,config('rbac.allow'));//把其他要用到的路由提前写在配置文件里
$routeUrl = $request->route()->getName();//获取当前路由名
// echo '<pre>';
// print_r($routes);
// print_r($routeUrl);
// die;
if(!in_array($routeUrl,$routes)){
//exit('暂无权限');
return redirect(route('admin.404'));
}
return $next($request);
}
tp的权限判断 tp5为例 可以写在Base控制器的构造方法里
//权限数组
private $in_node = ['index/index'];
//判断是否登录
$token = input('token');
if (empty($token)) {
$this->error('缺少token参数', '/login');
}
//验证失败返回0 成功返回uid
$res = Token::verifyToken($token);
if (!$res) {
$this->error('token令牌失效', '/login');
}
//验证权限
//1. 取出权限
$userNode = Session::get('node'); //session
//$userNode = \app\admin\model\Admin::getUserNode($res); // postman 如果postman请求则重新查询用户权限 $res => uid
//2. 权限控制器,权限方法 拼接成地址 如: admin/index
foreach ($userNode as $item) {
foreach ($item['child'] as $value) {
//3. 将拼接好的地址放入数组内
$this->in_node[] = strtolower($value['node_controller']) .'/'. strtolower($value['node_action']);
}
}
//4. 获取当前地址栏地址 admin/recycle
$controller = \request()->controller(); //控制器
$action= \request()->action(); //方法
$path = strtolower($controller) .'/'. strtolower($action);
//5. 判断地址是否在数组内 -- 判断学生是否在班级内
//echo "<pre>";
//print_r($path);
//print_r($this->in_node);die;
if(!in_array($path,$this->in_node)){
// in_array 判断元素是否在数组内 在返回true 不在返回false
$this->error('无权限,请联系管理员!', '/login');
}
}