storage.uts 3.7 KB

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