| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 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
- }
|