mirror of https://github.com/veops/cmdb.git
feat(ui):批量导入模型根据create权限过滤&&模型配置页面权限 (#323)
This commit is contained in:
parent
4beece5a6e
commit
f143e30cf5
|
@ -77,7 +77,7 @@ const genCmdbRoutes = async () => {
|
||||||
path: '/cmdb/ci_types',
|
path: '/cmdb/ci_types',
|
||||||
name: 'ci_type',
|
name: 'ci_type',
|
||||||
component: () => import('../views/ci_types/index'),
|
component: () => import('../views/ci_types/index'),
|
||||||
meta: { title: '模型配置', icon: 'ops-cmdb-citype', selectedIcon: 'ops-cmdb-citype-selected', keepAlive: false }
|
meta: { title: '模型配置', icon: 'ops-cmdb-citype', selectedIcon: 'ops-cmdb-citype-selected', keepAlive: false, permission: ['cmdb_admin', 'admin'] }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/cmdb/disabled3',
|
path: '/cmdb/disabled3',
|
||||||
|
|
|
@ -89,10 +89,12 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
|
import { mapState } from 'vuex'
|
||||||
import { downloadExcel } from '../../../utils/helper'
|
import { downloadExcel } from '../../../utils/helper'
|
||||||
import { getCITypes } from '@/modules/cmdb/api/CIType'
|
import { getCITypes } from '@/modules/cmdb/api/CIType'
|
||||||
import { getCITypeAttributesById } from '@/modules/cmdb/api/CITypeAttr'
|
import { getCITypeAttributesById } from '@/modules/cmdb/api/CITypeAttr'
|
||||||
import { getCITypeParent, getCanEditByParentIdChildId } from '@/modules/cmdb/api/CITypeRelation'
|
import { getCITypeParent, getCanEditByParentIdChildId } from '@/modules/cmdb/api/CITypeRelation'
|
||||||
|
import { searchPermResourceByRoleId } from '@/modules/acl/api/permission'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'CiTypeChoice',
|
name: 'CiTypeChoice',
|
||||||
|
@ -112,9 +114,21 @@ export default {
|
||||||
canEdit: {},
|
canEdit: {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created: function() {
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
rid: (state) => state.user.rid,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
async created() {
|
||||||
|
const { resources } = await searchPermResourceByRoleId(this.rid, {
|
||||||
|
resource_type_id: 'CIType',
|
||||||
|
app_id: 'cmdb',
|
||||||
|
})
|
||||||
getCITypes().then((res) => {
|
getCITypes().then((res) => {
|
||||||
this.ciTypeList = res.ci_types
|
this.ciTypeList = res.ci_types.filter((type) => {
|
||||||
|
const _findRe = resources.find((re) => re.name === type.name)
|
||||||
|
return _findRe?.permissions.includes('create') ?? false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
import { generatorDynamicRouter, constantRouterMap } from '@/router/config'
|
import { generatorDynamicRouter, constantRouterMap } from '@/router/config'
|
||||||
|
import { searchPermResourceByRoleId } from '@/modules/acl/api/permission'
|
||||||
|
import store from '@/store'
|
||||||
import user from './user'
|
import user from './user'
|
||||||
/**
|
/**
|
||||||
* 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
|
* 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
|
||||||
|
@ -7,37 +9,46 @@ import user from './user'
|
||||||
* @param route
|
* @param route
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
function hasPermission(permission, route) {
|
async function hasPermission(permission, route) {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
const { detailPermissions } = user.state
|
const { detailPermissions } = user.state
|
||||||
if (route.meta && route.meta.permission) {
|
if (route.meta && route.meta.permission) {
|
||||||
// let flag = false
|
|
||||||
// for (let i = 0, len = permission.length; i < len; i++) {
|
|
||||||
// flag = (route.meta.permission || []).includes(permission[i])
|
|
||||||
// if (flag) {
|
|
||||||
// return true
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return false
|
|
||||||
const totalPer = [...route.meta.appName && detailPermissions[`${route.meta.appName}`] ? detailPermissions[`${route.meta.appName}`].map(item => item.name) : [], ...permission]
|
const totalPer = [...route.meta.appName && detailPermissions[`${route.meta.appName}`] ? detailPermissions[`${route.meta.appName}`].map(item => item.name) : [], ...permission]
|
||||||
return route.meta.permission.some(item => totalPer.includes(item))
|
let flag = false
|
||||||
|
if (route.name === 'ci_type') {
|
||||||
|
await searchPermResourceByRoleId(store.state.user.rid, {
|
||||||
|
resource_type_id: 'page',
|
||||||
|
app_id: 'cmdb',
|
||||||
|
}).then(res => {
|
||||||
|
const { resources } = res
|
||||||
|
const _idx = resources.findIndex(item => item.name === '模型配置')
|
||||||
|
flag = flag || (_idx > -1)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
return true
|
resolve(route.meta.permission.some(item => totalPer.includes(item)) || flag)
|
||||||
|
}
|
||||||
|
resolve(true)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function filterAsyncRouter(routerMap, roles) {
|
async function filterAsyncRouter(routerMap, roles) {
|
||||||
return routerMap.filter(route => {
|
const filteredRoutes = []
|
||||||
|
for (let i = 0; i < routerMap.length; i++) {
|
||||||
|
const route = routerMap[i]
|
||||||
const default_route = ['company_info', 'company_structure', 'company_group']
|
const default_route = ['company_info', 'company_structure', 'company_group']
|
||||||
if (default_route.includes(route.name)) {
|
if (default_route.includes(route.name)) {
|
||||||
return true
|
filteredRoutes.push(route)
|
||||||
}
|
}
|
||||||
if (hasPermission(roles.permissions, route)) {
|
await hasPermission(roles.permissions, route).then(async flag => {
|
||||||
|
if (flag) {
|
||||||
if (route.children && route.children.length) {
|
if (route.children && route.children.length) {
|
||||||
route.children = filterAsyncRouter(route.children, roles)
|
route.children = await filterAsyncRouter(route.children, roles)
|
||||||
}
|
}
|
||||||
return true
|
filteredRoutes.push(route)
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
return filteredRoutes
|
||||||
}
|
}
|
||||||
|
|
||||||
const routes = {
|
const routes = {
|
||||||
|
@ -55,8 +66,8 @@ const routes = {
|
||||||
GenerateRoutes({ commit }, data) {
|
GenerateRoutes({ commit }, data) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
const { roles } = data
|
const { roles } = data
|
||||||
generatorDynamicRouter().then(routers => {
|
generatorDynamicRouter().then(async routers => {
|
||||||
const accessedRouters = filterAsyncRouter(routers, roles)
|
const accessedRouters = await filterAsyncRouter(routers, roles)
|
||||||
commit('SET_ROUTERS', accessedRouters)
|
commit('SET_ROUTERS', accessedRouters)
|
||||||
resolve(accessedRouters)
|
resolve(accessedRouters)
|
||||||
})
|
})
|
||||||
|
|
|
@ -54,13 +54,14 @@ const user = {
|
||||||
state.token = token
|
state.token = token
|
||||||
},
|
},
|
||||||
|
|
||||||
SET_USER_INFO: (state, { name, welcome, avatar, roles, info, uid, username, mobile, department_id, employee_id, email, nickname, sex, position_name, direct_supervisor_id, annual_leave }) => {
|
SET_USER_INFO: (state, { name, welcome, avatar, roles, info, uid, rid, username, mobile, department_id, employee_id, email, nickname, sex, position_name, direct_supervisor_id, annual_leave }) => {
|
||||||
state.name = name
|
state.name = name
|
||||||
state.welcome = welcome
|
state.welcome = welcome
|
||||||
state.avatar = avatar
|
state.avatar = avatar
|
||||||
state.roles = roles
|
state.roles = roles
|
||||||
state.info = info
|
state.info = info
|
||||||
state.uid = uid
|
state.uid = uid
|
||||||
|
state.rid = rid
|
||||||
state.authed = true
|
state.authed = true
|
||||||
state.username = username
|
state.username = username
|
||||||
state.mobile = mobile
|
state.mobile = mobile
|
||||||
|
@ -149,6 +150,7 @@ const user = {
|
||||||
welcome: welcome(),
|
welcome: welcome(),
|
||||||
avatar: result.avatar,
|
avatar: result.avatar,
|
||||||
uid: result.uid,
|
uid: result.uid,
|
||||||
|
rid: result.rid,
|
||||||
username: result.username,
|
username: result.username,
|
||||||
mobile: res.mobile,
|
mobile: res.mobile,
|
||||||
department_id: res.department_id,
|
department_id: res.department_id,
|
||||||
|
|
Loading…
Reference in New Issue