package auth import ( "errors" "strconv" "time" "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" ) type IAuth interface { Init() Login(*entitys.CtrlContext) Logout(*entitys.CtrlContext) } var iauthMap map[string]IAuth func init() { iauthMap = make(map[string]IAuth) } /** * @brief: 注册自定登录对象, 会调用Init进行初始化 * @param1 t: key * @param2 a: 认证对象 * @return none */ func RegisterAuth(t string, a IAuth) { if t == "" || a == nil { return } var ok bool if _, ok = iauthMap[t]; ok { return } else { a.Init() iauthMap[t] = a } } /** * @brief: 获取认证对象 * @param1 t: key * @return1 认证对象 */ func GetAuth(t string) IAuth { var iauth IAuth var ok bool if iauth, ok = iauthMap[t]; ok { return iauth } else { return nil } } /** * @brief: 添加token到全局缓存中 * @param1 userInfo: 用户信息 */ func AddToGlobalTokenStore(c *entitys.CtrlContext, userInfo *sysmodel.SysUser) (*sysmodel.LoginReturnInfo, error) { token := &entitys.Token{} timestamp := uint64(time.Now().UnixNano()) timestamp_str := strconv.FormatUint(timestamp, 10) sec_tooken := sysutils.GenerateToken(userInfo.LoginId + timestamp_str) if v := sysutils.GetGlobalTokenStore().Get(sec_tooken); v == nil { token.AccessToken = sec_tooken token.RefreshToken = sec_tooken token.LoginID = userInfo.LoginId token.UserId = userInfo.Id token.Result = 200 token.ServerIp = "" token.Domain = userInfo.Domain //sysutils.GetGlobalTokenStore().Set(sec_tooken, token) sysutils.GetGlobalTokenStore().SetPc(sec_tooken, token) } else { token = v } // 查找Business对应的用户信息 var businessUser sysmodel.SysUser _, err := c.App.GetBusinessDb(userInfo.Domain).Table(new(sysmodel.SysUser)).ID(userInfo.Id).Get(&businessUser) if err != nil { return nil, errors.New("business db con't found user!") } data := sysmodel.LoginReturnInfo{} data.Id = userInfo.Id data.LoginId = userInfo.LoginId data.Token = token.AccessToken data.Type = userInfo.Type data.Domain = userInfo.Domain data.OrgId = businessUser.OrgId data.Name = businessUser.Name data.Mobile = businessUser.Mobile data.Email = businessUser.Email // 查找用户对应角色 var roles []sysmodel.SysRole c.App.GetBusinessDb(userInfo.Domain).SQL("select sys_role.* from sys_user_role, sys_role where sys_user_role.role_id = sys_role.id and sys_role.del_flag = 0 and sys_user_role.user_id = ? order by sys_role.priority asc", userInfo.Id).Find(&roles) data.Roles = roles return &data, nil }