access.ts 725 B

123456789101112131415161718192021
  1. import lodash from 'lodash';
  2. export const includesKey = (keys: string[], permission: Partial<Permission>[]): boolean => {
  3. const permissionIds = permission.map((item) => item.id);
  4. const result = lodash.xorWith(keys, lodash.intersection(keys, permissionIds), lodash.isEqual);
  5. return result.length === 0;
  6. };
  7. /**
  8. * @see https://umijs.org/zh-CN/plugins/plugin-access
  9. * */
  10. export default function access(initialState: { currentUser?: UserInfo | undefined }) {
  11. const { currentUser } = initialState;
  12. const checkAccess = (keys: string[]) =>
  13. currentUser && includesKey(keys, currentUser!.permissions);
  14. return {
  15. user: checkAccess(['user']),
  16. role: checkAccess(['role']),
  17. org: checkAccess(['org']),
  18. };
  19. }