package controllers import ( "fmt" "strconv" "strings" "time" "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" ) //https://www.kancloud.cn/xormplus/xorm/167077 // _Login // @Title _Login // @Description 用户登录 // @Param logininfo false "登录信息" // @Success 200 {object} sysmodel.Account // @Failure 403 :id is empty func System_Login(c *SystemController) { var logininfo sysmodel.LoginInfo c.Ctx.BindJSON(&logininfo) __none_func_system__(logininfo) fmt.Println(logininfo) var user sysmodel.SysUser ret, err := c.Db.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user) if ret && err == nil { //TODO check password timestamp := uint64(time.Now().UnixNano()) md5Pwd := utils.HashPassword(logininfo.Password, "") //密码错误 if !strings.EqualFold(user.Password, md5Pwd) { c.Ctx.JSON(200, sysmodel.SysReturn{400, "passowrd incorrect!", nil}) return } token := &entitys.Token{} if v := utils.GlobalTokenStore.Get(logininfo.Account + user.Domain); v == nil { timestamp_str := strconv.FormatUint(timestamp, 10) sec_tooken := utils.GenerateToken(logininfo.Account + timestamp_str) token.AccessToken = sec_tooken token.RefreshToken = sec_tooken token.LoginID = logininfo.Account token.UserId = user.Id token.Result = 200 //token.Password = pwd token.ServerIp = "" token.Domain = user.Domain utils.GlobalTokenStore.Set(sec_tooken, token) //设置session //fmt.Println("----------set token ----------", token.AccessToken) //session := sessions.Default(c.Ctx) //session.Set("token", token.AccessToken) //session.Save() } else { token = v } data := sysmodel.LoginReturnInfo{user.Id, user.LoginId, token.AccessToken} c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data}) } else { //fmt.Println(err.Error()) c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or passowrd incorrect!", nil}) } } // _Logout // @Title _Logout // @Description 用户退出 // @Success 200 {object} sysmodel.Account // @Failure 403 :id is empty func System_Logout(c *SystemController) { token := c.Ctx.GetHeader("token") fmt.Println("delete token: ", token) utils.GlobalTokenStore.Remove(token) ret := __none_func_system__() if ret { c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil}) } else { c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil}) } } // _GetMenuTree // @Title _GetMenuTree // @Description 获取系统菜单 // @Param user string false "用户id" // @Success 200 {object} sysmodel.Account // @Failure 403 :id is empty func System_GetMenuTree(c *SystemController) { user := c.Ctx.Param(":user") ret := __none_func_system__(user) var menus []sysmodel.SysMenuTree c.Db.SQL(sysmodel.Selectall_sys_menu).Find(&menus) var menutree []sysmodel.SysMenuTree finChildrenMenu(&menus, "", nil, &menutree) for i := 0; i < len(menutree); i++ { finChildrenMenu(&menus, menutree[i].Id, &menutree[i], &menutree) } if ret { c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menutree}) } } // _GetOrgTree // @Title _GetOrgTree // @Description 获取组织架构树 // @Success 200 {object} sysmodel.Account // @Failure 403 :id is empty func System_GetOrgTree(c *SystemController) { ret := __none_func_system__() var orgs []sysmodel.SysOrgTree c.Db.SQL(sysmodel.Selectall_sys_org).Find(&orgs) var orgtree []sysmodel.SysOrgTree finChildrenOrg(&orgs, "", nil, &orgtree) for i := 0; i < len(orgtree); i++ { finChildrenOrg(&orgs, orgtree[i].Id, &orgtree[i], &orgtree) } if ret { c.Ctx.JSON(200, sysmodel.SysReturn{200, "", orgtree}) } else { c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil}) } } func finChildrenOrg(menus *[]sysmodel.SysOrgTree, parent string, parent_menu *sysmodel.SysOrgTree, menutree *[]sysmodel.SysOrgTree) { for _, m := range *menus { if m.Parent == parent { if parent_menu == nil { *menutree = append(*menutree, m) //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree) } else { parent_menu.Children = append(parent_menu.Children, m) finChildrenOrg(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree) } } } } func finChildrenMenu(menus *[]sysmodel.SysMenuTree, parent string, parent_menu *sysmodel.SysMenuTree, menutree *[]sysmodel.SysMenuTree) { for _, m := range *menus { if m.Parent == parent { if parent_menu == nil { *menutree = append(*menutree, m) //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree) } else { parent_menu.Children = append(parent_menu.Children, m) finChildrenMenu(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree) } } } } // _FindUserPage // @Title _FindUserPage // @Description 获取用户分布数据 // @Param page false "分页参数" // @Success 200 {object} sysmodel.Account // @Failure 403 :id is empty func System_FindUserPage(c *SystemController) { var getpageinfo sysmodel.GetPageInfo c.Ctx.BindJSON(&getpageinfo) __none_func_system__(getpageinfo) fmt.Println(getpageinfo) page := sysmodel.SysUserPageInfo{} var users []sysmodel.SysUser err := c.Db.SQL(sysmodel.Selectall_sys_user).Limit(getpageinfo.PageSize, (getpageinfo.PageNum-1)*getpageinfo.PageSize).Find(&users) page.Content = users page.PageSize = getpageinfo.PageSize page.PageNum = getpageinfo.PageNum page.TotalSize = 1 if err == nil { c.Ctx.JSON(200, sysmodel.SysReturn{200, "", page}) } else { fmt.Println(err.Error()) c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil}) } } // _FindPermissions // @Title _FindPermissions // @Description 查找用户的菜单权限标识集合 // @Param user string false "用户id" // @Success 200 {object} sysmodel.Account // @Failure 403 :id is empty func System_FindPermissions(c *SystemController) { //获取用户id tk, _ := c.Ctx.Get("token") user := tk.(*entitys.Token) //user := c.Ctx.Param(":user") ret := __none_func_system__(user) if ret { c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil}) } else { c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil}) } } // _AddPermission // @Title _AddPermission // @Description 查找用户的菜单权限标识集合 // @Param perms string false "权限标识" // @Param domain string false "域" // @Success 200 {object} models.Account // @Failure 403 :id is empty func System_AddPermission(c *SystemController) { perms := c.Ctx.Param(":perms") domain := c.Ctx.Param(":domain") ret := __none_func_system__(perms, domain) //查找此权限标识符是否存在 //c.Db.Where().Get() tk, _ := c.Ctx.Get("token") user := tk.(*entitys.Token) permiss := &sysmodel.SysPermission{} permiss.Id = utils.NewUUID() permiss.Perms = perms permiss.Domain = domain permiss.CreateBy = user.UserId permiss.CreateTime = time.Now() _, err := c.Db.Insert(permiss) if ret && err == nil { c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil}) } else { c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil}) } } func __none_func_system__(params ...interface{}) bool { return true }