菜单上的权限

This commit is contained in:
Captain.B 2020-03-06 15:26:03 +08:00
parent d9ee8e4085
commit 4274e8d81c
4 changed files with 50 additions and 10 deletions

View File

@ -1,4 +1,4 @@
import {TokenKey} from "./constants"; import {ROLE_ORG_ADMIN, ROLE_TEST_MANAGER, ROLE_TEST_USER, ROLE_TEST_VIEWER, TokenKey} from "./constants";
export function hasRole(role) { export function hasRole(role) {
let user = JSON.parse(localStorage.getItem(TokenKey)); let user = JSON.parse(localStorage.getItem(TokenKey));
@ -16,3 +16,15 @@ export function hasRoles(...roles) {
} }
return false; return false;
} }
export function checkoutCurrentOrganization() {
let user = JSON.parse(localStorage.getItem(TokenKey));
// 查看当前用户是否是 lastOrganizationId 的组织管理员
return user.userRoles.filter(ur => hasRole(ROLE_ORG_ADMIN) && user.lastOrganizationId === ur.sourceId).length > 0;
}
export function checkoutCurrentWorkspace() {
let user = JSON.parse(localStorage.getItem(TokenKey));
// 查看当前用户是否是 lastWorkspaceId 的工作空间用户
return user.userRoles.filter(ur => hasRoles(ROLE_TEST_MANAGER, ROLE_TEST_USER, ROLE_TEST_VIEWER) && user.lastWorkspaceId === ur.sourceId).length > 0;
}

View File

@ -17,7 +17,7 @@
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-row type="flex" justify="center" align="middle"> <el-row type="flex" justify="center" align="middle">
<router-link to="/createTest" v-permission="['test_user','test_manager']"> <router-link to="/createTest" v-permission="['test_user','test_manager']" v-if="isCurrentWorkspaceUser">
<el-button type="primary" size="small">{{$t('load_test.create')}}</el-button> <el-button type="primary" size="small">{{$t('load_test.create')}}</el-button>
</router-link> </router-link>
</el-row> </el-row>
@ -36,12 +36,14 @@
import MsView from "./components/router/View"; import MsView from "./components/router/View";
import MsUser from "./components/HeaderUser"; import MsUser from "./components/HeaderUser";
import MsWebSocket from "./components/websocket/WebSocket"; import MsWebSocket from "./components/websocket/WebSocket";
import {checkoutCurrentWorkspace} from "../common/utils";
export default { export default {
name: 'app', name: 'app',
data() { data() {
return { return {
auth: false, auth: false,
isCurrentWorkspaceUser: false,
} }
}, },
beforeCreate() { beforeCreate() {
@ -58,7 +60,10 @@
}); });
}, },
components: {MsWebSocket, MsUser, MsMenus, MsView, MsTopMenus}, components: {MsWebSocket, MsUser, MsMenus, MsView, MsTopMenus},
methods: {} methods: {},
mounted() {
this.isCurrentWorkspaceUser = checkoutCurrentWorkspace();
}
} }
</script> </script>

View File

@ -4,7 +4,7 @@
<el-menu-item index="/setting/personsetting"> <el-menu-item index="/setting/personsetting">
{{ $t("i18n.home") }} {{ $t("i18n.home") }}
</el-menu-item> </el-menu-item>
<el-submenu index="3" popper-class="submenu" v-permission="['test_manager']"> <el-submenu index="3" popper-class="submenu" v-permission="['test_manager']" v-if="isCurrentWorkspaceUser">
<template slot="title">{{$t('commons.project')}}</template> <template slot="title">{{$t('commons.project')}}</template>
<ms-recent-project/> <ms-recent-project/>
<el-divider/> <el-divider/>
@ -16,7 +16,8 @@
<el-button type="text">{{$t('project.create')}}</el-button> <el-button type="text">{{$t('project.create')}}</el-button>
</el-menu-item> </el-menu-item>
</el-submenu> </el-submenu>
<el-submenu index="4" popper-class="submenu" v-permission="['test_manager', 'test_user']"> <el-submenu index="4" popper-class="submenu" v-permission="['test_manager', 'test_user']"
v-if="isCurrentWorkspaceUser">
<template slot="title">{{$t('commons.test')}}</template> <template slot="title">{{$t('commons.test')}}</template>
<ms-recent-test-plan/> <ms-recent-test-plan/>
<el-divider/> <el-divider/>
@ -28,7 +29,8 @@
<el-button type="text">{{$t('load_test.create')}}</el-button> <el-button type="text">{{$t('load_test.create')}}</el-button>
</el-menu-item> </el-menu-item>
</el-submenu> </el-submenu>
<el-submenu index="5" popper-class="submenu" v-permission="['test_manager', 'test_user', 'test_viewer']"> <el-submenu index="5" popper-class="submenu" v-permission="['test_manager', 'test_user', 'test_viewer']"
v-if="isCurrentWorkspaceUser">
<template slot="title">{{$t('commons.report')}}</template> <template slot="title">{{$t('commons.report')}}</template>
<ms-recent-report/> <ms-recent-report/>
<el-divider/> <el-divider/>
@ -44,10 +46,19 @@
import MsRecentTestPlan from "./testPlan/RecentTestPlan"; import MsRecentTestPlan from "./testPlan/RecentTestPlan";
import MsRecentProject from "./project/RecentProject"; import MsRecentProject from "./project/RecentProject";
import MsRecentReport from "./report/RecentReport"; import MsRecentReport from "./report/RecentReport";
import {checkoutCurrentWorkspace} from "../../common/utils";
export default { export default {
name: "MsMenus", name: "MsMenus",
components: {MsRecentReport, MsRecentTestPlan, MsRecentProject} components: {MsRecentReport, MsRecentTestPlan, MsRecentProject},
data() {
return {
isCurrentWorkspaceUser: false,
}
},
mounted() {
this.isCurrentWorkspaceUser = checkoutCurrentWorkspace();
}
} }
</script> </script>

View File

@ -11,7 +11,7 @@
<el-menu-item index="/setting/testresourcepool">测试资源池</el-menu-item> <el-menu-item index="/setting/testresourcepool">测试资源池</el-menu-item>
</el-submenu> </el-submenu>
<el-submenu index="2" v-permission="['org_admin']"> <el-submenu index="2" v-permission="['org_admin']" v-if="isCurrentOrganizationAdmin">
<template slot="title"> <template slot="title">
<font-awesome-icon class="icon organization" :icon="['far', 'building']" size="lg"/> <font-awesome-icon class="icon organization" :icon="['far', 'building']" size="lg"/>
<span>组织</span> <span>组织</span>
@ -20,7 +20,7 @@
<el-menu-item index="/setting/organizationworkspace" v-permission="['org_admin']">工作空间</el-menu-item> <el-menu-item index="/setting/organizationworkspace" v-permission="['org_admin']">工作空间</el-menu-item>
</el-submenu> </el-submenu>
<el-submenu index="3" v-permission="['test_manager','test_user','test_viewer']"> <el-submenu index="3" v-permission="['test_manager','test_user','test_viewer']" v-if="isCurrentWorkspaceUser">
<template slot="title"> <template slot="title">
<font-awesome-icon class="icon workspace" :icon="['far', 'list-alt']" size="lg"/> <font-awesome-icon class="icon workspace" :icon="['far', 'list-alt']" size="lg"/>
<span>工作空间</span> <span>工作空间</span>
@ -40,8 +40,20 @@
</template> </template>
<script> <script>
import {checkoutCurrentOrganization, checkoutCurrentWorkspace} from "../../../common/utils";
export default { export default {
name: "MsSettingMenu" name: "MsSettingMenu",
data() {
return {
isCurrentOrganizationAdmin: false,
isCurrentWorkspaceUser: false,
}
},
mounted() {
this.isCurrentOrganizationAdmin = checkoutCurrentOrganization();
this.isCurrentWorkspaceUser = checkoutCurrentWorkspace();
},
} }
</script> </script>