管理后台中间件解析

发布时间 2023-04-17 22:23:09作者: yangphp

前言:

管理后台中间件主要作用,

登录判断,

获取管理员及权限信息,

记录日志

正文:

文件:admins/middleware/adminMid.go

//声明一个接收用户基本信息的结构体
type UserInfo struct {
    UserName string
    UserTrueName string
    AdminUid int
}

var userinfo = &UserInfo{"","",0}
//声明后台菜单,及当前菜单
var menus []*modes.TreeList
var current_menu modes.SysMenus

//检测管理员登录,这里用的cookie进行判断
func CheckLogin (c *gin.Context)  {

    admin_uid2  := common.GetCookie("admin_uid",c)
    admin_auth2  := common.GetCookie("admin_auth",c)

    var admin_uid string
    var admin_auth string


    if admin_uid2  != "" && admin_auth2  != ""{
        admin_uid = admin_uid2
        admin_auth = admin_auth2
    }else{
        //重定向到登录页面
        c.Redirect(http.StatusFound,"/admin/login")
        c.Abort() //不加这个abort后续代码还会执行
        return
    }

    //判断用户名密码,是否正常
    myDb := common.DB
    admins := modes.Admins{}
    //获取admin
    myDb.Model(&modes.Admins{}).First(&admins,admin_uid)
    //生成token
check_token := common.MyMd5(strconv.Itoa(admins.AdminUid)+admins.AdminUname)
//后台token判断
    if check_token !=  admin_auth || admin_auth == ""{
        //重定向到登录页面
        c.Redirect(http.StatusFound,"/admin/login")
        c.Abort() //不加这个abort后续代码还会执行
        return
    }

    //权限判断
    var  url string
    var menu  = modes.SysMenus{}
//获取菜单
    if(strings.Contains(c.Request.RequestURI,"?")){
        spurl := strings.Split(c.Request.RequestURI,"?")
        url = spurl[0]
    }else{
        url = c.Request.RequestURI
    }
    myDb.Model(modes.SysMenus{}).Where("menu_url=?",url).First(&menu)
    if menu.Id>0 {
   //用户权限判断
        res :=modes.HasPowerStr(admins.AdminUid,menu.Id)
        if res != true {
            c.JSON(http.StatusOK,gin.H{
                "code":400,
                "msg":"无此操作权限",
            })
            c.Abort() //不加这个abort后续代码还会执行
            return
        }
    }

    //设置值
    c.Set("admin_uid", admins.AdminUid)
    c.Set("admin_info",admins)

    userinfo.AdminUid = admins.AdminUid
    userinfo.UserName = admins.AdminUname
    userinfo.UserTrueName = admins.AdminTruename
    //记录日志
    modes.AddAdminLog(admins.AdminUid,c)
    //获取菜单列表
    menus,_ = modes.MenuList()
    //获取当前的菜单
    current_menu = modes.CurrentMenu(c)
}
//定义一个在模板中可以获取管理员账号的方法
func GetAdminName() string  {
    return userinfo.UserName
}
//获取管理员id
func GetAdminId() int  {
    return userinfo.AdminUid
}
//获取管理员姓名
func GetAdminTruename() string  {
    return userinfo.UserTrueName
}
//获取管理员菜单
func GetMenus() []*modes.TreeList {
    return menus
}
//获取当前菜单
func GetCurrentMenu() modes.SysMenus {
    return current_menu
}

 

完结