123456789101112131415161718192021222324252627282930313233343536 |
- import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router';
- import { computed } from 'vue';
- import { useUserStore } from '@/store';
- export default function usePermission() {
- const userStore = useUserStore();
- const role = userStore.getRole;
- return {
- accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
- return (
- !route.meta?.requiresAuth ||
- !route.meta?.roles ||
- route.meta?.roles?.includes('*') ||
- role === 'admin' ||
- route.meta?.roles?.includes(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
- };
- }
|