package auth import( "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" "strconv" "time" ) 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{ 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.Password = pwd token.ServerIp = "" token.Domain = userInfo.Domain sysutils.GetGlobalTokenStore().Set(sec_tooken, token) //sysutils.GetGlobalTokenStore().Set(token.LoginID+user.Domain, token) } else { token = v } data := sysmodel.LoginReturnInfo{} data.Id = userInfo.Id data.LoginId = userInfo.LoginId data.Name = userInfo.Name data.Mobile = userInfo.Mobile data.Email = userInfo.Email data.Token = token.AccessToken data.Type = userInfo.Type data.Domain = userInfo.Domain // 查找用户对应角色 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 }