管理后台中间件解析
前言:
管理后台中间件主要作用,
登录判断,
获取管理员及权限信息,
记录日志
正文:
文件: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 }
完结
但行好事,莫问前程!
本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/17327755.html