Unverified 提交 9e5e6309 作者: Netfan 提交者: GitHub

refactor(api): remove unnecessary userId param (#675)

* refactor(api): remove unnecessary userId param

移除getUserInfo、getPermCode、getMenuList接口的userId参数。
这些接口应当始终与当前登录用户相关而无需传递userId。

* fix: fix auth header key case error
上级 70dcd60b
...@@ -43,3 +43,18 @@ export function pagination<T = any>(pageNo: number, pageSize: number, array: T[] ...@@ -43,3 +43,18 @@ export function pagination<T = any>(pageNo: number, pageSize: number, array: T[]
: array.slice(offset, offset + Number(pageSize)); : array.slice(offset, offset + Number(pageSize));
return ret; return ret;
} }
export interface requestParams {
method: string;
body: any;
headers?: { authorization?: string };
query: any;
}
/**
* @description 本函数用于从request数据中获取token,请根据项目的实际情况修改
*
*/
export function getRequestToken({ headers }: requestParams): string | undefined {
return headers?.authorization;
}
import { resultSuccess } from '../_util'; import { resultSuccess, resultError, getRequestToken, requestParams } from '../_util';
import { MockMethod } from 'vite-plugin-mock'; import { MockMethod } from 'vite-plugin-mock';
import { createFakeUserList } from './user';
// single // single
const dashboardRoute = { const dashboardRoute = {
...@@ -13,47 +14,6 @@ const dashboardRoute = { ...@@ -13,47 +14,6 @@ const dashboardRoute = {
}, },
}; };
const frontRoute = {
path: 'front',
name: 'PermissionFrontDemo',
meta: {
title: 'routes.demo.permission.front',
},
children: [
{
path: 'page',
name: 'FrontPageAuth',
component: '/demo/permission/front/index',
meta: {
title: 'routes.demo.permission.frontPage',
},
},
{
path: 'btn',
name: 'FrontBtnAuth',
component: '/demo/permission/front/Btn',
meta: {
title: 'routes.demo.permission.frontBtn',
},
},
{
path: 'auth-pageA',
name: 'FrontAuthPageA',
component: '/demo/permission/front/AuthPageA',
meta: {
title: 'routes.demo.permission.frontTestA',
},
},
{
path: 'auth-pageB',
name: 'FrontAuthPageB',
component: '/demo/permission/front/AuthPageB',
meta: {
title: 'routes.demo.permission.frontTestB',
},
},
],
};
const backRoute = { const backRoute = {
path: 'back', path: 'back',
name: 'PermissionBackDemo', name: 'PermissionBackDemo',
...@@ -80,19 +40,8 @@ const backRoute = { ...@@ -80,19 +40,8 @@ const backRoute = {
}, },
], ],
}; };
const authRoute = {
path: '/permission',
name: 'Permission',
component: 'LAYOUT',
redirect: '/permission/front/page',
meta: {
icon: 'carbon:user-role',
title: 'routes.demo.permission.permission',
},
children: [frontRoute, backRoute],
};
const authRoute1 = { const authRoute = {
path: '/permission', path: '/permission',
name: 'Permission', name: 'Permission',
component: 'LAYOUT', component: 'LAYOUT',
...@@ -159,18 +108,86 @@ const levelRoute = { ...@@ -159,18 +108,86 @@ const levelRoute = {
}, },
], ],
}; };
const sysRoute = {
path: '/system',
name: 'System',
component: 'LAYOUT',
redirect: '/system/account',
meta: {
icon: 'ion:settings-outline',
title: 'routes.demo.system.moduleName',
},
children: [
{
path: 'account',
name: 'AccountManagement',
meta: {
title: 'routes.demo.system.account',
ignoreKeepAlive: true,
},
component: '/demo/system/account/index',
},
{
path: 'role',
name: 'RoleManagement',
meta: {
title: 'routes.demo.system.role',
ignoreKeepAlive: true,
},
component: '/demo/system/role/index',
},
{
path: 'menu',
name: 'MenuManagement',
meta: {
title: 'routes.demo.system.menu',
ignoreKeepAlive: true,
},
component: '/demo/system/menu/index',
},
{
path: 'dept',
name: 'DeptManagement',
meta: {
title: 'routes.demo.system.dept',
ignoreKeepAlive: true,
},
component: '/demo/system/dept/index',
},
{
path: 'changePassword',
name: 'ChangePassword',
meta: {
title: 'routes.demo.system.password',
ignoreKeepAlive: true,
},
component: '/demo/system/password/index',
},
],
};
export default [ export default [
{ {
url: '/basic-api/getMenuListById', url: '/basic-api/getMenuList',
timeout: 1000, timeout: 1000,
method: 'get', method: 'get',
response: ({ query }) => { response: (request: requestParams) => {
const { id } = query; const token = getRequestToken(request);
if (!token) {
return resultError('Invalid token!');
}
const checkUser = createFakeUserList().find((item) => item.token === token);
if (!checkUser) {
return resultError('Invalid user token!');
}
const id = checkUser.userId;
if (!id || id === '1') { if (!id || id === '1') {
return resultSuccess([dashboardRoute, authRoute, levelRoute]); return resultSuccess([dashboardRoute, authRoute, levelRoute, sysRoute]);
} }
if (id === '2') { if (id === '2') {
return resultSuccess([dashboardRoute, authRoute1, levelRoute]); return resultSuccess([dashboardRoute, authRoute, levelRoute]);
} }
}, },
}, },
......
import { MockMethod } from 'vite-plugin-mock'; import { MockMethod } from 'vite-plugin-mock';
import { resultError, resultSuccess } from '../_util'; import { resultError, resultSuccess, getRequestToken, requestParams } from '../_util';
function createFakeUserList() { export function createFakeUserList() {
return [ return [
{ {
userId: '1', userId: '1',
...@@ -67,11 +67,12 @@ export default [ ...@@ -67,11 +67,12 @@ export default [
}, },
}, },
{ {
url: '/basic-api/getUserInfoById', url: '/basic-api/getUserInfo',
method: 'get', method: 'get',
response: ({ query }) => { response: (request: requestParams) => {
const { userId } = query; const token = getRequestToken(request);
const checkUser = createFakeUserList().find((item) => item.userId === userId); if (!token) return resultError('Invalid token');
const checkUser = createFakeUserList().find((item) => item.token === token);
if (!checkUser) { if (!checkUser) {
return resultError('The corresponding user information was not obtained!'); return resultError('The corresponding user information was not obtained!');
} }
...@@ -79,15 +80,17 @@ export default [ ...@@ -79,15 +80,17 @@ export default [
}, },
}, },
{ {
url: '/basic-api/getPermCodeByUserId', url: '/basic-api/getPermCode',
timeout: 200, timeout: 200,
method: 'get', method: 'get',
response: ({ query }) => { response: (request: requestParams) => {
const { userId } = query; const token = getRequestToken(request);
if (!userId) { if (!token) return resultError('Invalid token');
return resultError('userId is not null!'); const checkUser = createFakeUserList().find((item) => item.token === token);
if (!checkUser) {
return resultError('Invalid token!');
} }
const codeList = fakeCodeList[userId]; const codeList = fakeCodeList[checkUser.userId];
return resultSuccess(codeList); return resultSuccess(codeList);
}, },
......
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import { getMenuListByIdParams, getMenuListByIdParamsResultModel } from './model/menuModel'; import { getMenuListResultModel } from './model/menuModel';
enum Api { enum Api {
GetMenuListById = '/getMenuListById', GetMenuList = '/getMenuList',
} }
/** /**
* @description: Get user menu based on id * @description: Get user menu based on id
*/ */
export const getMenuListById = (params: getMenuListByIdParams) => { export const getMenuList = () => {
return defHttp.get<getMenuListByIdParamsResultModel>({ url: Api.GetMenuListById, params }); return defHttp.get<getMenuListResultModel>({ url: Api.GetMenuList });
}; };
...@@ -11,13 +11,6 @@ export interface RouteItem { ...@@ -11,13 +11,6 @@ export interface RouteItem {
} }
/** /**
* @description: Get menu interface
*/
export interface getMenuListByIdParams {
id: number | string;
}
/**
* @description: Get menu return value * @description: Get menu return value
*/ */
export type getMenuListByIdParamsResultModel = RouteItem[]; export type getMenuListResultModel = RouteItem[];
...@@ -6,13 +6,6 @@ export interface LoginParams { ...@@ -6,13 +6,6 @@ export interface LoginParams {
password: string; password: string;
} }
/**
* @description: Get user information
*/
export interface GetUserInfoByUserIdParams {
userId: string | number;
}
export interface RoleInfo { export interface RoleInfo {
roleName: string; roleName: string;
value: string; value: string;
...@@ -30,7 +23,7 @@ export interface LoginResultModel { ...@@ -30,7 +23,7 @@ export interface LoginResultModel {
/** /**
* @description: Get user information return value * @description: Get user information return value
*/ */
export interface GetUserInfoByUserIdModel { export interface GetUserInfoModel {
roles: RoleInfo[]; roles: RoleInfo[];
// 用户id // 用户id
userId: string | number; userId: string | number;
......
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import { import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel';
LoginParams,
LoginResultModel,
GetUserInfoByUserIdParams,
GetUserInfoByUserIdModel,
} from './model/userModel';
import { ErrorMessageMode } from '/@/utils/http/axios/types'; import { ErrorMessageMode } from '/@/utils/http/axios/types';
enum Api { enum Api {
Login = '/login', Login = '/login',
GetUserInfoById = '/getUserInfoById', GetUserInfo = '/getUserInfo',
GetPermCodeByUserId = '/getPermCodeByUserId', GetPermCode = '/getPermCode',
} }
/** /**
...@@ -30,18 +25,12 @@ export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') ...@@ -30,18 +25,12 @@ export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal')
} }
/** /**
* @description: getUserInfoById * @description: getUserInfo
*/ */
export function getUserInfoById(params: GetUserInfoByUserIdParams) { export function getUserInfo() {
return defHttp.get<GetUserInfoByUserIdModel>({ return defHttp.get<GetUserInfoModel>({ url: Api.GetUserInfo });
url: Api.GetUserInfoById,
params,
});
} }
export function getPermCodeByUserId(params: GetUserInfoByUserIdParams) { export function getPermCode() {
return defHttp.get<string[]>({ return defHttp.get<string[]>({ url: Api.GetPermCode });
url: Api.GetPermCodeByUserId,
params,
});
} }
...@@ -41,13 +41,13 @@ export function usePermission() { ...@@ -41,13 +41,13 @@ export function usePermission() {
* Reset and regain authority resource information * Reset and regain authority resource information
* @param id * @param id
*/ */
async function resume(id?: string | number) { async function resume() {
const tabStore = useMultipleTabStore(); const tabStore = useMultipleTabStore();
tabStore.clearCacheTabs(); tabStore.clearCacheTabs();
resetRouter(); resetRouter();
const routes = await permissionStore.buildRoutesAction(id); const routes = await permissionStore.buildRoutesAction();
routes.forEach((route) => { routes.forEach((route) => {
router.addRoute((route as unknown) as RouteRecordRaw); router.addRoute(route as unknown as RouteRecordRaw);
}); });
permissionStore.setLastBuildMenuTime(); permissionStore.setLastBuildMenuTime();
closeAll(); closeAll();
...@@ -103,12 +103,11 @@ export function usePermission() { ...@@ -103,12 +103,11 @@ export function usePermission() {
} }
/** /**
* Change menu * refresh menu data
*/ */
async function changeMenu(id?: string | number) { async function refreshMenu() {
// TODO The id passed in here is for testing. Actually, you don’t need to pass it. The id of the login person will be automatically obtained. resume();
resume(id);
} }
return { changeRole, hasPermission, togglePermissionMode, changeMenu }; return { changeRole, hasPermission, togglePermissionMode, refreshMenu };
} }
...@@ -18,8 +18,8 @@ import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; ...@@ -18,8 +18,8 @@ import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
import { filter } from '/@/utils/helper/treeHelper'; import { filter } from '/@/utils/helper/treeHelper';
import { getMenuListById } from '/@/api/sys/menu'; import { getMenuList } from '/@/api/sys/menu';
import { getPermCodeByUserId } from '/@/api/sys/user'; import { getPermCode } from '/@/api/sys/user';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
...@@ -80,11 +80,11 @@ export const usePermissionStore = defineStore({ ...@@ -80,11 +80,11 @@ export const usePermissionStore = defineStore({
this.backMenuList = []; this.backMenuList = [];
this.lastBuildMenuTime = 0; this.lastBuildMenuTime = 0;
}, },
async changePermissionCode(userId: string) { async changePermissionCode() {
const codeList = await getPermCodeByUserId({ userId }); const codeList = await getPermCode();
this.setPermCodeList(codeList); this.setPermCodeList(codeList);
}, },
async buildRoutesAction(id?: number | string): Promise<AppRouteRecordRaw[]> { async buildRoutesAction(): Promise<AppRouteRecordRaw[]> {
const { t } = useI18n(); const { t } = useI18n();
const userStore = useUserStore(); const userStore = useUserStore();
const appStore = useAppStoreWidthOut(); const appStore = useAppStoreWidthOut();
...@@ -112,23 +112,17 @@ export const usePermissionStore = defineStore({ ...@@ -112,23 +112,17 @@ export const usePermissionStore = defineStore({
content: t('sys.app.menuLoading'), content: t('sys.app.menuLoading'),
duration: 1, duration: 1,
}); });
// Here to get the background routing menu logic to modify by yourself
const paramId = id || userStore.getUserInfo?.userId;
// !Simulate to obtain permission codes from the background, // !Simulate to obtain permission codes from the background,
// this function may only need to be executed once, and the actual project can be put at the right time by itself // this function may only need to be executed once, and the actual project can be put at the right time by itself
let routeList: AppRouteRecordRaw[] = []; let routeList: AppRouteRecordRaw[] = [];
try { try {
this.changePermissionCode('1'); this.changePermissionCode();
routeList = (await getMenuListById({ id: paramId })) as AppRouteRecordRaw[]; routeList = (await getMenuList()) as AppRouteRecordRaw[];
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
if (!paramId) {
throw new Error('paramId is undefined!');
}
// Dynamically introduce components // Dynamically introduce components
routeList = transformObjToRoute(routeList); routeList = transformObjToRoute(routeList);
......
...@@ -9,13 +9,9 @@ import { PageEnum } from '/@/enums/pageEnum'; ...@@ -9,13 +9,9 @@ import { PageEnum } from '/@/enums/pageEnum';
import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum'; import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum';
import { getAuthCache, setAuthCache } from '/@/utils/auth'; import { getAuthCache, setAuthCache } from '/@/utils/auth';
import { import { GetUserInfoModel, LoginParams } from '/@/api/sys/model/userModel';
GetUserInfoByUserIdModel,
GetUserInfoByUserIdParams,
LoginParams,
} from '/@/api/sys/model/userModel';
import { getUserInfoById, loginApi } from '/@/api/sys/user'; import { getUserInfo, loginApi } from '/@/api/sys/user';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
...@@ -84,16 +80,16 @@ export const useUserStore = defineStore({ ...@@ -84,16 +80,16 @@ export const useUserStore = defineStore({
goHome?: boolean; goHome?: boolean;
mode?: ErrorMessageMode; mode?: ErrorMessageMode;
} }
): Promise<GetUserInfoByUserIdModel | null> { ): Promise<GetUserInfoModel | null> {
try { try {
const { goHome = true, mode, ...loginParams } = params; const { goHome = true, mode, ...loginParams } = params;
const data = await loginApi(loginParams, mode); const data = await loginApi(loginParams, mode);
const { token, userId } = data; const { token } = data;
// save token // save token
this.setToken(token); this.setToken(token);
// get user info // get user info
const userInfo = await this.getUserInfoAction({ userId }); const userInfo = await this.getUserInfoAction();
const sessionTimeout = this.sessionTimeout; const sessionTimeout = this.sessionTimeout;
sessionTimeout && this.setSessionTimeout(false); sessionTimeout && this.setSessionTimeout(false);
...@@ -103,8 +99,8 @@ export const useUserStore = defineStore({ ...@@ -103,8 +99,8 @@ export const useUserStore = defineStore({
return Promise.reject(error); return Promise.reject(error);
} }
}, },
async getUserInfoAction({ userId }: GetUserInfoByUserIdParams) { async getUserInfoAction() {
const userInfo = await getUserInfoById({ userId }); const userInfo = await getUserInfo();
const { roles } = userInfo; const { roles } = userInfo;
const roleList = roles.map((item) => item.value) as RoleEnum[]; const roleList = roles.map((item) => item.value) as RoleEnum[];
this.setUserInfo(userInfo); this.setUserInfo(userInfo);
......
<template> <template>
<PageWrapper contentBackground title="按钮权限控制" contentClass="p-4"> <PageWrapper contentBackground title="按钮权限控制" contentClass="p-4">
<Alert message="刷新后会还原" show-icon />
<CurrentPermissionMode /> <CurrentPermissionMode />
<p> <p>
当前拥有的code列表: <a> {{ permissionStore.getPermCodeList }} </a> 当前拥有的code列表: <a> {{ permissionStore.getPermCodeList }} </a>
</p> </p>
<Divider /> <Divider />
<Alert class="mt-4" type="info" message="点击后请查看按钮变化" show-icon /> <Alert
class="mt-4"
type="info"
message="点击后请查看按钮变化(必须处于后台权限模式才可测试此页面所展示的功能)"
show-icon
/>
<Divider /> <Divider />
<a-button type="primary" class="mr-2" @click="changePermissionCode('2')"> <a-button type="primary" class="mr-2" @click="switchToken(2)" :disabled="!isBackPremissionMode">
点击切换按钮权限(用户id为2) 点击切换按钮权限(用户id为2)
</a-button> </a-button>
<a-button type="primary" @click="changePermissionCode('1')"> <a-button type="primary" @click="switchToken(1)" :disabled="!isBackPremissionMode">
点击切换按钮权限(用户id为1,默认) 点击切换按钮权限(用户id为1,默认)
</a-button> </a-button>
<Divider>组件方式判断权限</Divider> <template v-if="isBackPremissionMode">
<Authority :value="'1000'"> <Divider>组件方式判断权限</Divider>
<a-button type="primary" class="mx-4"> 拥有code ['1000']权限可见 </a-button> <Authority :value="'1000'">
</Authority> <a-button type="primary" class="mx-4"> 拥有code ['1000']权限可见 </a-button>
</Authority>
<Authority :value="'2000'"> <Authority :value="'2000'">
<a-button color="success" class="mx-4"> 拥有code ['2000']权限可见 </a-button> <a-button color="success" class="mx-4"> 拥有code ['2000']权限可见 </a-button>
</Authority> </Authority>
<Authority :value="['1000', '2000']"> <Authority :value="['1000', '2000']">
<a-button color="error" class="mx-4"> 拥有code ['1000','2000']角色权限可见 </a-button> <a-button color="error" class="mx-4"> 拥有code ['1000','2000']角色权限可见 </a-button>
</Authority> </Authority>
<Divider>函数方式方式判断权限</Divider> <Divider>函数方式方式判断权限</Divider>
<a-button v-if="hasPermission('1000')" type="primary" class="mx-4"> <a-button v-if="hasPermission('1000')" type="primary" class="mx-4">
拥有code ['1000']权限可见 拥有code ['1000']权限可见
</a-button> </a-button>
<a-button v-if="hasPermission('2000')" color="success" class="mx-4"> <a-button v-if="hasPermission('2000')" color="success" class="mx-4">
拥有code ['2000']权限可见 拥有code ['2000']权限可见
</a-button> </a-button>
<a-button v-if="hasPermission(['1000', '2000'])" color="error" class="mx-4"> <a-button v-if="hasPermission(['1000', '2000'])" color="error" class="mx-4">
拥有code ['1000','2000']角色权限可见 拥有code ['1000','2000']角色权限可见
</a-button> </a-button>
<Divider>指令方式方式判断权限(该方式不能动态修改权限.)</Divider> <Divider>指令方式方式判断权限(该方式不能动态修改权限.)</Divider>
<a-button v-auth="'1000'" type="primary" class="mx-4"> 拥有code ['1000']权限可见 </a-button> <a-button v-auth="'1000'" type="primary" class="mx-4"> 拥有code ['1000']权限可见 </a-button>
<a-button v-auth="'2000'" color="success" class="mx-4"> 拥有code ['2000']权限可见 </a-button> <a-button v-auth="'2000'" color="success" class="mx-4"> 拥有code ['2000']权限可见 </a-button>
<a-button v-auth="['1000', '2000']" color="error" class="mx-4"> <a-button v-auth="['1000', '2000']" color="error" class="mx-4">
拥有code ['1000','2000']角色权限可见 拥有code ['1000','2000']角色权限可见
</a-button> </a-button>
</template>
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent, computed } from 'vue';
import { Alert, Divider } from 'ant-design-vue'; import { Alert, Divider } from 'ant-design-vue';
import CurrentPermissionMode from '../CurrentPermissionMode.vue'; import CurrentPermissionMode from '../CurrentPermissionMode.vue';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
...@@ -62,22 +66,36 @@ ...@@ -62,22 +66,36 @@
import { usePermissionStore } from '/@/store/modules/permission'; import { usePermissionStore } from '/@/store/modules/permission';
import { PermissionModeEnum } from '/@/enums/appEnum'; import { PermissionModeEnum } from '/@/enums/appEnum';
import { PageWrapper } from '/@/components/Page'; import { PageWrapper } from '/@/components/Page';
import { useAppStore } from '/@/store/modules/app';
import { useUserStore } from '/@/store/modules/user';
export default defineComponent({ export default defineComponent({
components: { Alert, PageWrapper, CurrentPermissionMode, Divider, Authority }, components: { Alert, PageWrapper, CurrentPermissionMode, Divider, Authority },
setup() { setup() {
const { hasPermission } = usePermission(); const { hasPermission } = usePermission();
const permissionStore = usePermissionStore(); const permissionStore = usePermissionStore();
const appStore = useAppStore();
const userStore = useUserStore();
const isBackPremissionMode = computed(
() => appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK
);
async function switchToken(userId: number) {
// 本函数切换用户登录Token的部分仅用于演示,实际生产时切换身份应当重新登录
const token = 'fakeToken' + userId;
userStore.setToken(token);
function changePermissionCode(userId: string) { // 重新获取用户信息和菜单
permissionStore.changePermissionCode(userId); userStore.getUserInfoAction();
permissionStore.changePermissionCode();
} }
return { return {
hasPermission, hasPermission,
permissionStore, permissionStore,
changePermissionCode, switchToken,
PermissionModeEnum, isBackPremissionMode,
}; };
}, },
}); });
......
...@@ -12,26 +12,52 @@ ...@@ -12,26 +12,52 @@
<div class="mt-4"> <div class="mt-4">
权限切换(请先切换权限模式为后台权限模式): 权限切换(请先切换权限模式为后台权限模式):
<a-button-group> <a-button-group>
<a-button @click="changeMenu('1')"> 获取用户id为1的菜单 </a-button> <a-button @click="switchToken(1)" :disabled="!isBackPremissionMode">
<a-button @click="changeMenu('2')"> 获取用户id为2的菜单 </a-button> 获取用户id为1的菜单
</a-button>
<a-button @click="switchToken(2)" :disabled="!isBackPremissionMode">
获取用户id为2的菜单
</a-button>
</a-button-group> </a-button-group>
</div> </div>
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent, computed } from 'vue';
import CurrentPermissionMode from '../CurrentPermissionMode.vue'; import CurrentPermissionMode from '../CurrentPermissionMode.vue';
import { RoleEnum } from '/@/enums/roleEnum'; import { RoleEnum } from '/@/enums/roleEnum';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import { useUserStore } from '/@/store/modules/user';
import { PageWrapper } from '/@/components/Page'; import { PageWrapper } from '/@/components/Page';
import { PermissionModeEnum } from '/@/enums/appEnum';
import { useAppStore } from '/@/store/modules/app';
import { Alert } from 'ant-design-vue'; import { Alert } from 'ant-design-vue';
export default defineComponent({ export default defineComponent({
components: { Alert, CurrentPermissionMode, PageWrapper }, components: { Alert, CurrentPermissionMode, PageWrapper },
setup() { setup() {
const { changeMenu } = usePermission(); const { refreshMenu } = usePermission();
const userStore = useUserStore();
const appStore = useAppStore();
const isBackPremissionMode = computed(
() => appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK
);
async function switchToken(userId: number) {
// 本函数切换用户登录Token的部分仅用于演示,实际生产时切换身份应当重新登录
const token = 'fakeToken' + userId;
userStore.setToken(token);
// 重新获取用户信息和菜单
userStore.getUserInfoAction();
refreshMenu();
}
return { return {
RoleEnum, RoleEnum,
changeMenu, refreshMenu,
switchToken,
isBackPremissionMode,
}; };
}, },
}); });
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论