You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

access.ts 1.6 kB

2 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { checkRole, matchPermission } from './utils/permission';
  2. /**
  3. * @see https://umijs.org/zh-CN/plugins/plugin-access
  4. * */
  5. export default function access(initialState: { currentUser?: API.CurrentUser } | undefined) {
  6. const { currentUser } = initialState ?? {};
  7. const hasPerms = (perm: string) => {
  8. return matchPermission(initialState?.currentUser?.permissions, perm);
  9. };
  10. const roleFiler = (route: { authority: string[] }) => {
  11. return checkRole(initialState?.currentUser?.roles, route.authority);
  12. };
  13. return {
  14. canAdmin: currentUser && currentUser.access === 'admin',
  15. hasPerms,
  16. roleFiler,
  17. };
  18. }
  19. export function setSessionToken(
  20. access_token: string | undefined,
  21. refresh_token: string | undefined,
  22. expireTime: number,
  23. ): void {
  24. if (access_token) {
  25. localStorage.setItem('access_token', access_token);
  26. } else {
  27. localStorage.removeItem('access_token');
  28. }
  29. if (refresh_token) {
  30. localStorage.setItem('refresh_token', refresh_token);
  31. } else {
  32. localStorage.removeItem('refresh_token');
  33. }
  34. localStorage.setItem('expireTime', `${expireTime}`);
  35. }
  36. export function getAccessToken() {
  37. return localStorage.getItem('access_token');
  38. }
  39. export function getRefreshToken() {
  40. return localStorage.getItem('refresh_token');
  41. }
  42. export function getTokenExpireTime() {
  43. return localStorage.getItem('expireTime');
  44. }
  45. export function clearSessionToken() {
  46. sessionStorage.removeItem('user');
  47. localStorage.removeItem('access_token');
  48. localStorage.removeItem('refresh_token');
  49. localStorage.removeItem('expireTime');
  50. }