auth.go 2.7 KB

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