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',
|
||||
name: 'ci_type',
|
||||
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',
|
||||
|
|
|
@ -89,10 +89,12 @@
|
|||
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import { mapState } from 'vuex'
|
||||
import { downloadExcel } from '../../../utils/helper'
|
||||
import { getCITypes } from '@/modules/cmdb/api/CIType'
|
||||
import { getCITypeAttributesById } from '@/modules/cmdb/api/CITypeAttr'
|
||||
import { getCITypeParent, getCanEditByParentIdChildId } from '@/modules/cmdb/api/CITypeRelation'
|
||||
import { searchPermResourceByRoleId } from '@/modules/acl/api/permission'
|
||||
|
||||
export default {
|
||||
name: 'CiTypeChoice',
|
||||
|
@ -112,9 +114,21 @@ export default {
|
|||
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) => {
|
||||
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: {
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
import { generatorDynamicRouter, constantRouterMap } from '@/router/config'
|
||||
import { searchPermResourceByRoleId } from '@/modules/acl/api/permission'
|
||||
import store from '@/store'
|
||||
import user from './user'
|
||||
/**
|
||||
* 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
|
||||
|
@ -7,37 +9,46 @@ import user from './user'
|
|||
* @param route
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function hasPermission(permission, route) {
|
||||
async function hasPermission(permission, route) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const { detailPermissions } = user.state
|
||||
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]
|
||||
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) {
|
||||
return routerMap.filter(route => {
|
||||
async function filterAsyncRouter(routerMap, roles) {
|
||||
const filteredRoutes = []
|
||||
for (let i = 0; i < routerMap.length; i++) {
|
||||
const route = routerMap[i]
|
||||
const default_route = ['company_info', 'company_structure', 'company_group']
|
||||
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) {
|
||||
route.children = filterAsyncRouter(route.children, roles)
|
||||
route.children = await filterAsyncRouter(route.children, roles)
|
||||
}
|
||||
return true
|
||||
filteredRoutes.push(route)
|
||||
}
|
||||
return false
|
||||
})
|
||||
}
|
||||
return filteredRoutes
|
||||
}
|
||||
|
||||
const routes = {
|
||||
|
@ -55,8 +66,8 @@ const routes = {
|
|||
GenerateRoutes({ commit }, data) {
|
||||
return new Promise(resolve => {
|
||||
const { roles } = data
|
||||
generatorDynamicRouter().then(routers => {
|
||||
const accessedRouters = filterAsyncRouter(routers, roles)
|
||||
generatorDynamicRouter().then(async routers => {
|
||||
const accessedRouters = await filterAsyncRouter(routers, roles)
|
||||
commit('SET_ROUTERS', accessedRouters)
|
||||
resolve(accessedRouters)
|
||||
})
|
||||
|
|
|
@ -54,13 +54,14 @@ const user = {
|
|||
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.welcome = welcome
|
||||
state.avatar = avatar
|
||||
state.roles = roles
|
||||
state.info = info
|
||||
state.uid = uid
|
||||
state.rid = rid
|
||||
state.authed = true
|
||||
state.username = username
|
||||
state.mobile = mobile
|
||||
|
@ -149,6 +150,7 @@ const user = {
|
|||
welcome: welcome(),
|
||||
avatar: result.avatar,
|
||||
uid: result.uid,
|
||||
rid: result.rid,
|
||||
username: result.username,
|
||||
mobile: res.mobile,
|
||||
department_id: res.department_id,
|
||||
|
|
Loading…
Reference in New Issue