🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

<?php

namespace app\admin\common;
use app\BaseController;
use think\facade\Db;
use think\facade\Session;
use think\facade\View;
/**
 * 菜单逻辑处理
 */
class Common_menus extends BaseController
{
    /**
     * 获取全部菜单
     * @param $admin_id 会员id
     */
    static public function menus($admin_id)
    {
        //权限id
        $jurisdiction = db::name("admin")->alias("a")
            ->join("admin_role b","a.role_id = b.id","LEFT")
            ->where("a.admin_id = $admin_id")
            ->value("b.jurisdiction");
        if (empty($jurisdiction)){
            $jurisdiction = 0;
        }
        //左侧菜单栏
        $config_menus = db::name("config_menus")
            ->where("superior_id = 0 and is_show = 1 and is_left = 1 and id in ($jurisdiction)")
            ->order("sort desc")
            ->select();
        $config_menus = json_decode($config_menus,true);
        foreach ($config_menus as $k => $v){
            $list = db::name("config_menus")->where("superior_id = {$v['id']} and is_show = 1 and is_left = 1 and id in ($jurisdiction)")
                    ->order("sort desc")->select();
            $config_menus[$k]["list_count"] = count($list);
            $config_menus[$k]["list"] = $list;
        }
        return View::assign([
            'config_menus'=>$config_menus,
        ]);
    }

    /**
     * 全部权限获取
     * @param $role_id 角色id
     */
    static function jurisdiction($role_id=0)
    {
        /*验证该角色是否有那些权限*/
        $jurisdiction = db::name("admin_role")->where("id = $role_id")->value("jurisdiction");
        $jurisdiction_arr = array();//权限信息
        if (!empty($jurisdiction)){
            $jurisdiction_arr = explode(',',$jurisdiction);
        }
        $config_list = db::name("config_menus")->where("is_show = 1")->order("sort desc")->field("id,superior_id,title,url,describe")->select();
        $config_list = json_decode($config_list,true);
        foreach ($config_list as $key => $value){
            $config_list[$key]["is_checked"] = 0;
            foreach ($jurisdiction_arr as $key2 => $value2) {
                if ($value["id"] == $value2) {
                    $config_list[$key]["is_checked"] = 1;
                }
            }
        }
        /*重装数组*/
        $arr = array();
        foreach ($config_list as $k => $v){
            $v["list"] = array();
            if ($v["superior_id"] == 0){
                //第一层
                $arr[$k] = $v;
                foreach ($config_list as $k2 => $v2){
                    $v2["list"] = array();
                    //第二层
                    if ($v["id"] == $v2["superior_id"]){
                        foreach ($config_list as $k3 => $v3){
                            //第三层
                            if ($v2["id"] == $v3["superior_id"]){
                                $v2["list"][] = $v3;
                            }
                        }
                        $arr[$k]["list"][] = $v2;
                    }
                }
            }
        }
        return $arr;
    }

    /**
     * 页面权限
     * @param $admin_id 管理员id
     */
    static function table_jurisdiction($admin_id)
    {
        $role_id = db::name("admin")->where("admin_id = $admin_id")->value("role_id");
        $jurisdiction = db::name("admin_role")->where("id = $role_id")->value("jurisdiction");
        $jurisdiction_arr = array();//权限信息
        if (!empty($jurisdiction)){
            $jurisdiction_arr = explode(',',$jurisdiction);
        }
        $list = db::name("config_menus")->where("is_left = 0")->field("id")->select();
        $list = json_decode($list,true);
        $list_data = array();
        foreach ($list as $key => $value){
            $name = 'is'.$value["id"].'_show';
            $list_data[$name] = 0;
            foreach ($jurisdiction_arr as $key2 => $value2) {
                if ($value["id"] == $value2) {
                    $list_data[$name] = 1;
                }
            }
        }
        return $list_data;
    }

    /**
     * 获取自己这条线的全部上级(默认包含自己)
     * @param int $id 菜单id
     * @param int $type 是否包含自己:1是 0否
     */
    static function menu_wire($id=0,$type=1)
    {
        if (empty($type)) {
            $str_id = '';
        } else {
            $str_id = $id . ',';
        }
        while (!empty($id)) {
            $superior_id = db::name("config_menus")->where("id = $id")->value('superior_id');
            if (!empty($superior_id)) {
                $str_id .= $superior_id . ',';
            }
            //重新定义
            $id = $superior_id;
        }
        return substr($str_id, 0, strlen($str_id) - 1);
    }
}