mirror of
https://github.com/jumpserver/lina.git
synced 2026-01-29 21:28:52 +00:00
perf: 优化权限判断,支持或的关系
This commit is contained in:
@@ -126,7 +126,8 @@ export default [
|
||||
component: empty,
|
||||
redirect: '',
|
||||
meta: {
|
||||
permissions: []
|
||||
permissions: ['rbac.view_orgrole | rbac.view_systemrole'],
|
||||
app: 'rbac'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@@ -135,9 +136,8 @@ export default [
|
||||
name: 'RoleList',
|
||||
meta: {
|
||||
title: i18n.t('route.RoleList'),
|
||||
permissions: [],
|
||||
app: 'rbac',
|
||||
resource: 'role'
|
||||
permissions: ['rbac.view_orgrole | rbac.view_systemrole']
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
} from '@/router'
|
||||
import empty from '@/layout/empty'
|
||||
import Layout from '@/layout/index'
|
||||
import { getResourceNameByPath, getBeforeViewRoute } from '@/utils/jms'
|
||||
import { getResourceNameByPath, getBeforeViewRoute, hasPermission } from '@/utils/jms'
|
||||
|
||||
function hasLicense(route, rootState) {
|
||||
const licenseIsValid = rootState.settings.hasValidLicense
|
||||
@@ -39,20 +39,6 @@ export function filterHiddenRoutes(routes, rootState) {
|
||||
return res
|
||||
}
|
||||
|
||||
function hasPermission(perms, route) {
|
||||
// console.log('>>> Route: ', route)
|
||||
const permsRequired = route.meta?.permissions
|
||||
// Vue.$log.debug('Route permissions required: ', route.path, permsRequired)
|
||||
let has
|
||||
if (!permsRequired || permsRequired.length === 0) {
|
||||
has = true
|
||||
} else {
|
||||
has = perms.some(perm => permsRequired.includes(perm))
|
||||
}
|
||||
// Vue.$log.debug('Has permission: ', route.path, ' => ', has)
|
||||
return has
|
||||
}
|
||||
|
||||
const actionMapper = {
|
||||
create: 'add',
|
||||
update: 'change',
|
||||
@@ -150,9 +136,8 @@ function cleanRoute(tmp, parent) {
|
||||
return tmp
|
||||
}
|
||||
|
||||
export function filterPermedRoutes(routes, rootState, permsCache, parent) {
|
||||
export function filterPermedRoutes(routes, parent) {
|
||||
const res = []
|
||||
const perms = permsCache || rootState.users.perms
|
||||
|
||||
for (const route of routes) {
|
||||
let tmp = {
|
||||
@@ -160,9 +145,9 @@ export function filterPermedRoutes(routes, rootState, permsCache, parent) {
|
||||
}
|
||||
tmp = cleanRoute(tmp, parent)
|
||||
|
||||
if (hasPermission(perms, tmp)) {
|
||||
if (hasPermission(tmp.meta.permissions)) {
|
||||
if (tmp.children) {
|
||||
tmp.children = filterPermedRoutes(tmp.children, rootState, perms, tmp)
|
||||
tmp.children = filterPermedRoutes(tmp.children, tmp)
|
||||
}
|
||||
res.push(tmp)
|
||||
}
|
||||
@@ -213,7 +198,7 @@ const actions = {
|
||||
},
|
||||
generateRoutes({ commit, dispatch, rootState }, { to, from }) {
|
||||
return new Promise(resolve => {
|
||||
let routes = filterPermedRoutes(allRoutes, rootState)
|
||||
let routes = filterPermedRoutes(allRoutes, null)
|
||||
routes = filterHiddenRoutes(routes, rootState)
|
||||
if (routes.length === 0) {
|
||||
console.log('No route find')
|
||||
|
||||
@@ -4,21 +4,28 @@ export function openTaskPage(taskId) {
|
||||
window.open(`/#/ops/celery/task/${taskId}/log/`, '', 'width=900,height=600')
|
||||
}
|
||||
|
||||
export function hasPermission(permsRequired) {
|
||||
const perms = store.getters?.currentOrgPerms || []
|
||||
|
||||
export function checkPermission(permsRequired, permsAll) {
|
||||
if (!permsRequired || permsRequired.length === 0) {
|
||||
return true
|
||||
}
|
||||
|
||||
if (typeof permsRequired === 'string') {
|
||||
permsRequired = [permsRequired]
|
||||
}
|
||||
|
||||
const has = perms.some(perm => {
|
||||
return permsRequired.includes(perm)
|
||||
return permsRequired.every(perm => {
|
||||
// 包含 | 是或的关系, 单独处理
|
||||
if (perm.indexOf('|') === -1) {
|
||||
return permsAll.includes(perm)
|
||||
}
|
||||
const permOr = perm.split('|').map(item => item.trim())
|
||||
return permOr.some(perm => {
|
||||
return permsAll.includes(perm)
|
||||
})
|
||||
})
|
||||
return has
|
||||
}
|
||||
|
||||
export function hasPermission(permsRequired) {
|
||||
const permsAll = store.getters?.currentOrgPerms || []
|
||||
return checkPermission(permsRequired, permsAll)
|
||||
}
|
||||
|
||||
export function getResourceNameByPath(path) {
|
||||
|
||||
Reference in New Issue
Block a user