Commit 5661063ac2d802a3482b2f63e0b6192ef7556e68

Authored by ww
1 parent cda6a183

fix(DEFECT-1227): 修复客户角色只拥有可视化管理的查看权限

@@ -4,7 +4,7 @@ import { defineStore } from 'pinia'; @@ -4,7 +4,7 @@ import { defineStore } from 'pinia';
4 import { pinia as store } from '@/store'; 4 import { pinia as store } from '@/store';
5 import { RoleEnum } from '@/enums/external/roleEnum'; 5 import { RoleEnum } from '@/enums/external/roleEnum';
6 import { JWT_TOKEN_KEY, REFRESH_TOKEN_KEY, ROLES_KEY, SHARE_JWT_TOKEN_KEY, SHARE_REFRESH_TOKEN_KEY, USER_INFO_KEY } from '@/enums/external/cacheEnum'; 6 import { JWT_TOKEN_KEY, REFRESH_TOKEN_KEY, ROLES_KEY, SHARE_JWT_TOKEN_KEY, SHARE_REFRESH_TOKEN_KEY, USER_INFO_KEY } from '@/enums/external/cacheEnum';
7 -import { getAuthCache, getJwtToken, getRefreshToken, setAuthCache } from '@/utils/external/auth'; 7 +import { getAuthCache, getJwtToken, getRefreshToken, getUserInfo, setAuthCache } from '@/utils/external/auth';
8 import { 8 import {
9 LoginParams, 9 LoginParams,
10 LoginResultModel, 10 LoginResultModel,
@@ -43,7 +43,7 @@ export const useUserStore = defineStore({ @@ -43,7 +43,7 @@ export const useUserStore = defineStore({
43 enterPriseInfo: storage.get('enterPriseInfo') || null, 43 enterPriseInfo: storage.get('enterPriseInfo') || null,
44 44
45 // user info 45 // user info
46 - userInfo: null, 46 + userInfo: getUserInfo() || null,
47 userUpdateInfo: null, 47 userUpdateInfo: null,
48 // token 48 // token
49 jwtToken: getJwtToken() as string || undefined, 49 jwtToken: getJwtToken() as string || undefined,
1 import { Persistent, BasicKeys } from '@/utils/external/cache/persistent'; 1 import { Persistent, BasicKeys } from '@/utils/external/cache/persistent';
2 -import { CacheTypeEnum, SHARE_JWT_TOKEN_KEY, SHARE_REFRESH_TOKEN_KEY } from '@/enums/external/cacheEnum'; 2 +import { CacheTypeEnum, SHARE_JWT_TOKEN_KEY, SHARE_REFRESH_TOKEN_KEY, USER_INFO_KEY } from '@/enums/external/cacheEnum';
3 import projectSetting from '@/settings/external/projectSetting'; 3 import projectSetting from '@/settings/external/projectSetting';
4 import { JWT_TOKEN_KEY, REFRESH_TOKEN_KEY } from '@/enums/external/cacheEnum'; 4 import { JWT_TOKEN_KEY, REFRESH_TOKEN_KEY } from '@/enums/external/cacheEnum';
  5 +import { UserInfo } from '/#/external/store';
5 6
6 const { permissionCacheType } = projectSetting; 7 const { permissionCacheType } = projectSetting;
7 const isLocal = permissionCacheType === CacheTypeEnum.LOCAL; 8 const isLocal = permissionCacheType === CacheTypeEnum.LOCAL;
@@ -30,7 +31,11 @@ export function getRefreshToken(): string { @@ -30,7 +31,11 @@ export function getRefreshToken(): string {
30 export function getShareJwtToken(): string { 31 export function getShareJwtToken(): string {
31 return getAuthCache(SHARE_JWT_TOKEN_KEY); 32 return getAuthCache(SHARE_JWT_TOKEN_KEY);
32 } 33 }
  34 +
33 export function getShareRefreshToken(): string { 35 export function getShareRefreshToken(): string {
34 return getAuthCache(SHARE_REFRESH_TOKEN_KEY); 36 return getAuthCache(SHARE_REFRESH_TOKEN_KEY);
35 } 37 }
36 38
  39 +export function getUserInfo(): UserInfo {
  40 + return getAuthCache(USER_INFO_KEY)
  41 +}
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 </n-tooltip> 31 </n-tooltip>
32 <n-divider vertical /> 32 <n-divider vertical />
33 <!-- 保存 --> 33 <!-- 保存 -->
34 - <n-tooltip placement="bottom" trigger="hover"> 34 + <n-tooltip v-if="!isCustomerUser" placement="bottom" trigger="hover">
35 <template #trigger> 35 <template #trigger>
36 <div class="save-btn"> 36 <div class="save-btn">
37 <n-button size="small" type="primary" ghost @click="dataSyncUpdate()"> 37 <n-button size="small" type="primary" ghost @click="dataSyncUpdate()">
@@ -64,6 +64,7 @@ import { HistoryStackEnum } from '@/store/modules/chartHistoryStore/chartHistory @@ -64,6 +64,7 @@ import { HistoryStackEnum } from '@/store/modules/chartHistoryStore/chartHistory
64 import { useSyncRemote } from '../../../hooks/external/useRemote.hook' 64 import { useSyncRemote } from '../../../hooks/external/useRemote.hook'
65 import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore' 65 import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore'
66 import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d' 66 import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
  67 +import { useRole } from '@/views/chart/hooks/external/business/useRole'
67 68
68 const { LayersIcon, BarChartIcon, PrismIcon, HomeIcon, ArrowBackIcon, ArrowForwardIcon } = icon.ionicons5 69 const { LayersIcon, BarChartIcon, PrismIcon, HomeIcon, ArrowBackIcon, ArrowForwardIcon } = icon.ionicons5
69 const { setItem } = useChartLayoutStore() 70 const { setItem } = useChartLayoutStore()
@@ -71,6 +72,7 @@ const { getLayers, getCharts, getDetails } = toRefs(useChartLayoutStore()) @@ -71,6 +72,7 @@ const { getLayers, getCharts, getDetails } = toRefs(useChartLayoutStore())
71 const chartEditStore = useChartEditStore() 72 const chartEditStore = useChartEditStore()
72 const chartHistoryStore = useChartHistoryStore() 73 const chartHistoryStore = useChartHistoryStore()
73 const { dataSyncUpdate } = useSyncRemote() 74 const { dataSyncUpdate } = useSyncRemote()
  75 +const { isCustomerUser } = useRole()
74 76
75 interface ItemType<T> { 77 interface ItemType<T> {
76 key: T 78 key: T
  1 +import { RoleEnum } from '@/enums/external/roleEnum';
  2 +import { useUserStore } from '@/store/external/modules/user';
  3 +import { computed, unref } from 'vue';
  4 +
  5 +export const useRole = () => {
  6 + const userStore = useUserStore();
  7 +
  8 + const getRole = computed(() => {
  9 + return userStore.userInfo?.roles![0] as RoleEnum;
  10 + });
  11 +
  12 + const isPlatformAdmin = computed(() => {
  13 + return unref(getRole) === RoleEnum.PLATFORM_ADMIN;
  14 + });
  15 +
  16 + const isCustomerUser = computed(() => {
  17 + return unref(getRole) === RoleEnum.CUSTOMER_USER;
  18 + });
  19 +
  20 + const isTenantAdmin = computed(() => {
  21 + return unref(getRole) === RoleEnum.TENANT_ADMIN;
  22 + });
  23 +
  24 + const isSysadmin = computed(() => {
  25 + return unref(getRole) === RoleEnum.SYS_ADMIN;
  26 + });
  27 +
  28 + return { getRole, isPlatformAdmin, isCustomerUser, isTenantAdmin, isSysadmin };
  29 +};
1 import { fetchRouteParamsLocation, JSONStringify, JSONParse } from '@/utils' 1 import { fetchRouteParamsLocation, JSONStringify, JSONParse } from '@/utils'
2 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' 2 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
3 import { ProjectInfoEnum } from '@/store/external/modules/projectInfo.d' 3 import { ProjectInfoEnum } from '@/store/external/modules/projectInfo.d'
4 -import { onUnmounted } from 'vue' 4 +import { onUnmounted, unref } from 'vue'
5 import { saveInterval } from '@/settings/designSetting' 5 import { saveInterval } from '@/settings/designSetting'
6 import throttle from 'lodash/throttle' 6 import throttle from 'lodash/throttle'
7 import html2canvas from 'html2canvas' 7 import html2canvas from 'html2canvas'
@@ -11,6 +11,7 @@ import { SyncEnum } from '@/enums/external/editPageEnum' @@ -11,6 +11,7 @@ import { SyncEnum } from '@/enums/external/editPageEnum'
11 import { useProjectInfoStore } from '@/store/external/modules/projectInfo' 11 import { useProjectInfoStore } from '@/store/external/modules/projectInfo'
12 import { useSync } from '../useSync.hook' 12 import { useSync } from '../useSync.hook'
13 import { BaseUpdateContentParams, DateViewConfigurationInfoType } from '@/api/external/contentSave/model/contentModel' 13 import { BaseUpdateContentParams, DateViewConfigurationInfoType } from '@/api/external/contentSave/model/contentModel'
  14 +import { useRole } from './business/useRole'
14 15
15 /** 16 /**
16 * * base64转file 17 * * base64转file
@@ -37,6 +38,7 @@ export const useSyncRemote = () => { @@ -37,6 +38,7 @@ export const useSyncRemote = () => {
37 const chartEditStore = useChartEditStore() 38 const chartEditStore = useChartEditStore()
38 const projectInfoStore = useProjectInfoStore() 39 const projectInfoStore = useProjectInfoStore()
39 const { updateComponent } = useSync() 40 const { updateComponent } = useSync()
  41 + const { isCustomerUser } = useRole()
40 42
41 /** 43 /**
42 * * 赋值全局数据 44 * * 赋值全局数据
@@ -71,6 +73,10 @@ export const useSyncRemote = () => { @@ -71,6 +73,10 @@ export const useSyncRemote = () => {
71 // 数据保存 73 // 数据保存
72 const dataSyncUpdate = throttle(async (updateImg = true) => { 74 const dataSyncUpdate = throttle(async (updateImg = true) => {
73 if (!fetchRouteParamsLocation()) return 75 if (!fetchRouteParamsLocation()) return
  76 +
  77 + // 客户角色只有查看权限
  78 + if (unref(isCustomerUser)) return
  79 +
74 const { dataViewId, state, organizationId, dataViewName, dataViewContent } = projectInfoStore.getProjectInfo 80 const { dataViewId, state, organizationId, dataViewName, dataViewContent } = projectInfoStore.getProjectInfo
75 81
76 if (dataViewId === null || dataViewId === '') { 82 if (dataViewId === null || dataViewId === '') {