| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /**
- * Copyright (c) 2013-Now https://jeesite.com All rights reserved.
- * No deletion without permission, or be held responsible to law.
- * @author Vben、ThinkGem
- */
- import type { RouteRecordRaw } from 'vue-router';
- import { useAppStore } from '@jeesite/core/store/modules/app';
- import { usePermissionStore } from '@jeesite/core/store/modules/permission';
- import { useUserStore } from '@jeesite/core/store/modules/case';
- import { useTabs } from './useTabs';
- import { router, resetRouter } from '@jeesite/core/router';
- // import { RootRoute } from '@jeesite/core/router/routes';
- import projectSetting from '@jeesite/core/settings/projectSetting';
- import { PermissionModeEnum } from '@jeesite/core/enums/appEnum';
- import { RoleEnum } from '@jeesite/core/enums/roleEnum';
- import { intersection } from 'lodash-es';
- import { isArray } from '@jeesite/core/utils/is';
- import { useMultipleTabStore } from '@jeesite/core/store/modules/multipleTab';
- // User permissions related operations
- export function usePermission() {
- const userStore = useUserStore();
- const appStore = useAppStore();
- const permissionStore = usePermissionStore();
- const { closeAll } = useTabs(router);
- /**
- * Change permission mode
- */
- async function togglePermissionMode() {
- appStore.setProjectConfig({
- permissionMode:
- projectSetting.permissionMode === PermissionModeEnum.BACK
- ? PermissionModeEnum.ROUTE_MAPPING
- : PermissionModeEnum.BACK,
- });
- location.reload();
- }
- /**
- * Reset and regain authority resource information
- * @param id
- */
- async function resume() {
- const tabStore = useMultipleTabStore();
- tabStore.clearCacheTabs();
- resetRouter();
- const routes = await permissionStore.buildRoutesAction();
- routes.forEach((route) => {
- router.addRoute(route as unknown as RouteRecordRaw);
- });
- permissionStore.setLastBuildMenuTime();
- closeAll();
- }
- /**
- * Determine whether there is permission
- */
- function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
-
- return true;
- }
- function isPermitted(permi: string[], currPermi: string[]) {
- for (const i in permi) {
- if (permi[i] !== currPermi[i]) {
- return false;
- }
- }
- return true;
- }
- /**
- * Change roles
- * @param roles
- */
- async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> {
- if (projectSetting.permissionMode !== PermissionModeEnum.ROUTE_MAPPING) {
- throw new Error('Please switch PermissionModeEnum to ROUTE_MAPPING mode in the configuration to operate!');
- }
- if (!isArray(roles)) {
- roles = [roles];
- }
- await resume();
- }
- /**
- * refresh menu data
- */
- async function refreshMenu() {
- resume();
- }
- return { changeRole, hasPermission, togglePermissionMode, refreshMenu };
- }
|