yinbangzhong
2024-08-06 2a8ff4e2dc355f0dea17e01e1e5b7f55bd5588e6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import { RouteLocationNormalized, RouteRecordRaw } from "vue-router";
import { useUserStore } from "@/store";
import { getUserInfo, getUserResources } from "@/utils/auth";
 
export default function usePermission() {
  const userStore = useUserStore();
  return {
    accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
      //遍历userStore.resource
      let isok = false;
      let user = getUserResources();
      let resurces: any;
      if (userStore.resources) {
        resurces = userStore.resources;
      } else {
        if (user) {
          resurces = JSON.parse(user);
        }
      }
      if (resurces) {
        resurces.forEach(r => {
          if ((r.menuType == 0 || r.menuType == 3) && (route.name == r.component || route.path == r.component)) {
            isok = true;
          }
        });
        return isok;
      } else {
        return (
          !route.meta?.requiresAuth ||
          !route.meta?.roles ||
          route.meta?.roles?.includes("*") ||
          route.meta?.roles?.includes(userStore.role)
        );
      }
 
    },
    findFirstPermissionRoute(_routers: any, role = "admin") {
      const cloneRouters = [..._routers];
      while (cloneRouters.length) {
        const firstElement = cloneRouters.shift();
        if (
          firstElement?.meta?.roles?.find((el: string[]) => {
            return el.includes("*") || el.includes(role);
          })
        )
          return { name: firstElement.name };
        if (firstElement?.children) {
          cloneRouters.push(...firstElement.children);
        }
      }
      return null;
    }
    // You can add any rules you want
  };
}