auth.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package auth
  2. import (
  3. "errors"
  4. "strconv"
  5. "sync"
  6. "time"
  7. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  8. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  9. sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  10. )
  11. type IAuth interface {
  12. Init()
  13. Login(*entitys.CtrlContext)
  14. Logout(*entitys.CtrlContext)
  15. }
  16. var iauthMap map[string]IAuth
  17. func init() {
  18. iauthMap = make(map[string]IAuth)
  19. }
  20. /**
  21. * @brief: 注册自定登录对象, 会调用Init进行初始化
  22. * @param1 t: key
  23. * @param2 a: 认证对象
  24. * @return none
  25. */
  26. func RegisterAuth(t string, a IAuth) {
  27. if t == "" || a == nil {
  28. return
  29. }
  30. var ok bool
  31. if _, ok = iauthMap[t]; ok {
  32. return
  33. } else {
  34. a.Init()
  35. iauthMap[t] = a
  36. }
  37. }
  38. /**
  39. * @brief: 获取认证对象
  40. * @param1 t: key
  41. * @return1 认证对象
  42. */
  43. func GetAuth(t string) IAuth {
  44. var iauth IAuth
  45. var ok bool
  46. if iauth, ok = iauthMap[t]; ok {
  47. return iauth
  48. } else {
  49. return nil
  50. }
  51. }
  52. /**
  53. * @brief: 添加token到全局缓存中
  54. * @param1 userInfo: 用户信息
  55. */
  56. func AddToGlobalTokenStore(c *entitys.CtrlContext, userInfo *sysmodel.SysUser) (*sysmodel.LoginReturnInfo, error) {
  57. token := &entitys.Token{Lock: new(sync.RWMutex)}
  58. timestamp := uint64(time.Now().UnixNano())
  59. timestamp_str := strconv.FormatUint(timestamp, 10)
  60. sec_tooken := sysutils.GenerateToken(userInfo.LoginId + timestamp_str)
  61. if v := sysutils.GetGlobalTokenStore().Get(sec_tooken); v == nil {
  62. token.AccessToken = sec_tooken
  63. token.RefreshToken = sec_tooken
  64. token.LoginID = userInfo.LoginId
  65. token.UserId = userInfo.Id
  66. token.Result = 200
  67. //token.Password = pwd
  68. token.ServerIp = ""
  69. token.Domain = userInfo.Domain
  70. sysutils.GetGlobalTokenStore().Set(sec_tooken, token)
  71. //sysutils.GetGlobalTokenStore().Set(token.LoginID+user.Domain, token)
  72. } else {
  73. token = v
  74. }
  75. // 查找Business对应的用户信息
  76. var businessUser sysmodel.SysUser
  77. _, err := c.App.GetBusinessDb(userInfo.Domain).Table(new(sysmodel.SysUser)).ID(userInfo.Id).Where("status = 0 and del_flag = 0").Get(&businessUser)
  78. if err != nil {
  79. return nil, errors.New("business db con't found user!")
  80. }
  81. data := sysmodel.LoginReturnInfo{}
  82. data.Id = userInfo.Id
  83. data.LoginId = userInfo.LoginId
  84. data.Token = token.AccessToken
  85. data.Type = userInfo.Type
  86. data.Domain = userInfo.Domain
  87. data.OrgId = businessUser.OrgId
  88. data.Name = businessUser.Name
  89. data.Mobile = businessUser.Mobile
  90. data.Email = businessUser.Email
  91. // 查找用户对应角色
  92. var roles []sysmodel.SysRole
  93. 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)
  94. data.Roles = roles
  95. return &data, nil
  96. }