首页 > 其他分享 >管理后台中间件解析

管理后台中间件解析

时间:2023-04-17 22:24:14浏览次数:37  
标签:return modes admin menu 中间件 AdminUid admins 后台 解析

前言:

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

登录判断,

获取管理员及权限信息,

记录日志

正文:

文件: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
}

 

完结

 

标签:return,modes,admin,menu,中间件,AdminUid,admins,后台,解析
From: https://www.cnblogs.com/ypeih/p/17327755.html

相关文章

  • MySQL中间件mycat-01
    @目录mycat基础概念Mycat安装部署mycat基础概念1、什么是MyCat一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群一个融合内存缓存技术、NoSQL技术、HDFS大数据的新......
  • Mybatis源码深度解析(转载)
    我们从一个简单案例入手,接着就是一步一步的剥开Mybatis的源码,大量的图文结合。Mybatis使用案例添加mybatis和mysql相关pom依赖。<!--Mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</......
  • 探究公众号接口漏洞:从后台登录口到旁站getshell
    探究公众号接口漏洞:从后台登录口到旁站getshell1、入口发现与利用公众号接口安全漏洞某120公众号提供了一处考核平台,通过浏览器处打开该网站。打开可以看到一处密码登录口,试了一下常用的手机号和密码,没有登录成功。这个时候扫个目录吧。扫到了一处管理员页面:/index.php?c=h......
  • scrapy架构介绍、scrapy解析数据、settings相关配置、持久化方案
    上节回顾#1selenium -登录cnblogs,拿到cookie,再打开cnblogs,写入cookie,它就是登录状态-半自动点赞---》selenium生成的cookie,给requests用 -selenium操作浏览器,速度慢-requests速度快-动作链-自动登录12306#2打码平台 -帮我们破......
  • 关于 Fiori 应用里 SAP UI5 前端开发和 SEGW 后台 OData 服务开发的工作量比值问题
    我的知识星球有朋友向我提问:Jerry您好!请问一个中等复杂度的FioriUI5应用,前端代码用freestyle方式纯自己写,后端用SEGW开发Odata服务,前后端的工作量的比值大概是多少?需考虑调试测试的时间。关于这个问题,首先我们得界定,什么算是一个中等复杂度的Fiori应用?从前台视角来看,......
  • 森林之子结局有几个 结局解析_森林之子主角是谁的孩子
    做为《丛林》的续篇,《丛林之母》确实招揽了许多玩者们买回所制。这款存活动作格斗游戏玩的是三个抑制,玩的是三个眩晕。许多玩者早已兴高采烈想晓得故事情节是甚么了,因此这儿提早给诸位透漏下丛林之母的故事情节。丛林之母故事情节有三个:这款格斗游戏的故事情节分成三种,第二种是......
  • 支持多模型数据分析探索的存算分离湖仓一体架构解析(上)
    当企业需要建设独立的数据仓库系统来支撑BI和业务分析业务时,有了“数据湖+数据仓库”的混合架构。但混合架构带来了更高的建设成本、管理成本和业务开发成本。随着大数据技术的发展,通过在数据湖层增加分布式事务、元数据管理、极致的SQL性能、SQL和数据API接口能力,企业可以基于统......
  • Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线
    场景Java中Thread类的常用API以及使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126596884上面讲了Thread的常用API,下面记录下线程的一些常用操作。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现后台线程后台线程,是指运行时在后台提供的一......
  • 从一道面试题来学习前台进程和后台进程、孤儿进程和僵尸进程
    1、面试题介绍以前面试,面试官问了一个问题,大意是:我们在终端中,通过执行pythonmain.py命令,会启动一台前台进程直到程序结束。现在我还是想通过执行pythonmain.py,启动一个后台进程,让后台进程运行我们的业务逻辑。这个时候应该怎么做呢?回答上面这道题,需要先了解什么是前台......
  • Django基础 - 09路由URL控制与解析
     一、URL路由配置1.1 主路由:主程序目录下的urls.py; 对应属性ROOT_URLCONFurlpatterns=[path('admin/',admin.site.urls),path('index/',index),#配置子路由#include()导入mainapp模块下urls.py中声明的所有子路由path('user/',include......