storage.uts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /**
  2. * 存储管理工具
  3. */
  4. import { encryptAES, decryptAES } from './crypto'
  5. const ACCESS_TOKEN_KEY = "access_token"
  6. const USER_INFO_KEY = "user_info"
  7. const REMEMBERED_ACCOUNT_KEY = "remembered_account"
  8. /**
  9. * 保存 AccessToken
  10. */
  11. export const saveAccessToken = (token: string): void => {
  12. uni.setStorageSync(ACCESS_TOKEN_KEY, token)
  13. }
  14. /**
  15. * 获取 AccessToken
  16. */
  17. export const getAccessToken = (): string | null => {
  18. const token = uni.getStorageSync(ACCESS_TOKEN_KEY)
  19. if (token != null) {
  20. const tokenStr = token as string
  21. if (tokenStr.length > 0) {
  22. return tokenStr
  23. }
  24. }
  25. return null
  26. }
  27. /**
  28. * 清除 AccessToken
  29. */
  30. export const clearAccessToken = (): void => {
  31. uni.removeStorageSync(ACCESS_TOKEN_KEY)
  32. }
  33. /**
  34. * 保存用户信息
  35. */
  36. export const saveUserInfo = (userInfo: UTSJSONObject): void => {
  37. uni.setStorageSync(USER_INFO_KEY, JSON.stringify(userInfo))
  38. }
  39. /**
  40. * 获取用户信息
  41. */
  42. export const getUserInfo = (): UTSJSONObject | null => {
  43. const info = uni.getStorageSync(USER_INFO_KEY)
  44. if (info != null) {
  45. const infoStr = info as string
  46. if (infoStr.length > 0) {
  47. return JSON.parse(infoStr) as UTSJSONObject
  48. }
  49. }
  50. return null
  51. }
  52. /**
  53. * 清除用户信息
  54. */
  55. export const clearUserInfo = (): void => {
  56. uni.removeStorageSync(USER_INFO_KEY)
  57. }
  58. /**
  59. * 保存记住的账号密码
  60. * 密码会使用 AES 加密后保存
  61. */
  62. export const saveRememberedAccount = (username: string, password: string): void => {
  63. // 对密码进行 AES 加密
  64. const encryptedPassword = encryptAES(password)
  65. const data = {
  66. username: username,
  67. password: encryptedPassword
  68. }
  69. uni.setStorageSync(REMEMBERED_ACCOUNT_KEY, JSON.stringify(data))
  70. }
  71. /**
  72. * 获取记住的账号密码
  73. * 密码会自动解密
  74. */
  75. export const getRememberedAccount = (): UTSJSONObject | null => {
  76. const data = uni.getStorageSync(REMEMBERED_ACCOUNT_KEY)
  77. if (data != null) {
  78. const dataStr = data as string
  79. if (dataStr.length > 0) {
  80. const jsonData = JSON.parse(dataStr) as UTSJSONObject
  81. // 解密密码
  82. const encryptedPassword = jsonData['password'] as string
  83. const decryptedPassword = decryptAES(encryptedPassword)
  84. // 返回解密后的数据
  85. return {
  86. username: jsonData['username'],
  87. password: decryptedPassword
  88. }
  89. }
  90. }
  91. return null
  92. }
  93. /**
  94. * 清除记住的账号密码
  95. */
  96. export const clearRememberedAccount = (): void => {
  97. uni.removeStorageSync(REMEMBERED_ACCOUNT_KEY)
  98. }
  99. /**
  100. * 清除所有存储
  101. */
  102. export const clearAll = (): void => {
  103. clearAccessToken()
  104. clearUserInfo()
  105. }
  106. /**
  107. * 字符权限校验
  108. */
  109. export const checkPermi = (value: string[]): boolean => {
  110. if (value != null && value instanceof Array && value.length > 0) {
  111. const info = uni.getStorageSync(USER_INFO_KEY) as string
  112. const userObj = JSON.parse(info) as UTSJSONObject
  113. const permissions = userObj['permissions'] as UTSArray<string>
  114. const permissionDatas = value
  115. const all_permission = "*:*:*"
  116. const hasPermission = permissions.some((permission: string) => {
  117. return all_permission == permission || permissionDatas.includes(permission)
  118. })
  119. return hasPermission
  120. } else {
  121. console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
  122. return false
  123. }
  124. }