diff --git a/src/components/AssetUserTable/index.vue b/src/components/AssetUserTable/index.vue
index 12ba2a820..616ae8619 100644
--- a/src/components/AssetUserTable/index.vue
+++ b/src/components/AssetUserTable/index.vue
@@ -88,6 +88,10 @@ export default {
hasExport: {
type: Boolean,
default: true
+ },
+ hasClone: {
+ type: Boolean,
+ default: true
}
},
data() {
@@ -146,6 +150,7 @@ export default {
formatterArgs: {
hasUpdate: false, // can set function(row, value)
hasDelete: false, // can set function(row, value)
+ hasClone: this.hasClone,
moreActionsTitle: this.$t('common.More'),
extraActions: [
{
diff --git a/src/components/AutoDataTable/index.vue b/src/components/AutoDataTable/index.vue
index 7360e7ab8..6d2b6d558 100644
--- a/src/components/AutoDataTable/index.vue
+++ b/src/components/AutoDataTable/index.vue
@@ -66,7 +66,8 @@ export default {
async optionUrlMetaAndGenCols() {
const url = (this.config.url.indexOf('?') === -1) ? `${this.config.url}?draw=1&display=1` : `${this.config.url}&draw=1&display=1`
this.$store.dispatch('common/getUrlMeta', { url: url }).then(data => {
- this.meta = data.actions[this.method.toUpperCase()] || {}
+ const method = this.method.toUpperCase()
+ this.meta = data.actions && data.actions[method] ? data.actions[method] : {}
this.generateTotalColumns()
}).then(() => {
// 根据当前列重新生成最终渲染表格
diff --git a/src/components/ListTable/TableAction/LeftSide.vue b/src/components/ListTable/TableAction/LeftSide.vue
index a81f3bac7..8b22cd8e5 100644
--- a/src/components/ListTable/TableAction/LeftSide.vue
+++ b/src/components/ListTable/TableAction/LeftSide.vue
@@ -82,7 +82,7 @@ export default {
title: this.$t('common.Create'),
type: 'primary',
has: true,
- can: true,
+ can: this.canCreate,
dropdown: [],
callback: this.handleCreate
}
diff --git a/src/components/ListTable/formatters/ActionsFormatter.vue b/src/components/ListTable/formatters/ActionsFormatter.vue
index 31fceb513..16182ab4c 100644
--- a/src/components/ListTable/formatters/ActionsFormatter.vue
+++ b/src/components/ListTable/formatters/ActionsFormatter.vue
@@ -84,7 +84,9 @@ export default {
canUpdate: true, // can set function(row, value)
hasDelete: true, // can set function(row, value)
canDelete: true,
- hasClone: true,
+ hasClone: () => {
+ return !this.$store.getters.currentOrgIsRoot
+ },
canClone: true,
updateRoute: this.$route.name.replace('List', 'Update'),
cloneRoute: this.$route.name.replace('List', 'Create'),
diff --git a/src/components/ListTable/formatters/ArrayFormatter.vue b/src/components/ListTable/formatters/ArrayFormatter.vue
index 53e59472f..0d46818e9 100644
--- a/src/components/ListTable/formatters/ArrayFormatter.vue
+++ b/src/components/ListTable/formatters/ArrayFormatter.vue
@@ -1,15 +1,12 @@
- {{ cellValue }}
+ {{ cellValue.toString() }}
diff --git a/src/layout/components/GenericTreeListPage/index.vue b/src/layout/components/GenericTreeListPage/index.vue
index 180d3bc4d..ee0868754 100644
--- a/src/layout/components/GenericTreeListPage/index.vue
+++ b/src/layout/components/GenericTreeListPage/index.vue
@@ -4,7 +4,7 @@
@@ -39,6 +39,7 @@ export default {
iHeaderActions() {
const attrs = _.cloneDeep(this.headerActions)
const canCreate = _.get(attrs, 'canCreate', null)
+ // this.$log.debug('Current org: ', this.currentOrg)
if (canCreate === null && this.currentOrg && this.currentOrg.is_root) {
_.set(attrs, 'canCreate', false)
}
diff --git a/src/layout/components/NavBar/Organization.vue b/src/layout/components/NavBar/Organization.vue
index 3f8be89f2..943d9605c 100644
--- a/src/layout/components/NavBar/Organization.vue
+++ b/src/layout/components/NavBar/Organization.vue
@@ -48,7 +48,10 @@ export default {
},
methods: {
needShow() {
- return !this.isCollapse && this.userAdminOrgList.length > 1 && this.inAdminPage
+ const otherOrgs = this.userAdminOrgList.filter(org => {
+ return !org.is_root && !org.is_default
+ })
+ return !this.isCollapse && otherOrgs.length > 0 && this.inAdminPage
},
changeOrg(orgId) {
orgUtil.changeOrg(orgId)
diff --git a/src/store/getters.js b/src/store/getters.js
index 7df7ce1ef..def065b3e 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -4,7 +4,9 @@ const getters = {
token: state => state.users.token,
currentOrg: state => state.users.currentOrg,
currentOrgIsDefault: state => state.users.currentOrg.is_default,
- currentOrgIsRoot: state => state.users.currentOrg.is_root,
+ currentOrgIsRoot: state => {
+ return state.users.currentOrg && state.users.currentOrg.is_root
+ },
currentRole: state => state.users.currentRole,
userAdminOrgList: state => state.users.orgs,
currentUser: state => state.users.profile,
@@ -16,6 +18,9 @@ const getters = {
currentOrgPerms: state => state.users.perms,
MFAVerifyAt: state => state.users.MFAVerifyAt,
MFA_TTl: state => state.settings.publicSettings.SECURITY_MFA_VERIFY_TTL,
- tableConfig: state => state.table.tableConfig
+ tableConfig: state => state.table.tableConfig,
+ currentUserIsSuperAdmin: state => {
+ return state.users.sysRole === 'Admin'
+ }
}
export default getters
diff --git a/src/store/modules/users.js b/src/store/modules/users.js
index 05139e1a2..feee1dcdc 100644
--- a/src/store/modules/users.js
+++ b/src/store/modules/users.js
@@ -16,9 +16,11 @@ const getDefaultState = () => {
currentRole: getCurrentRoleFromCookie(),
profile: {},
roles: {},
+ sysRole: '',
orgs: [],
perms: 0b00000000,
- MFAVerifyAt: null
+ MFAVerifyAt: null,
+ isSuperAdmin: false
}
}
@@ -52,6 +54,9 @@ const mutations = {
SET_ROLES(state, roles) {
state.roles = roles
},
+ SET_SYS_ROLE(state, role) {
+ state.sysRole = role
+ },
SET_PERMS(state, perms) {
state.perms = perms
},
@@ -111,6 +116,7 @@ const actions = {
return dispatch('getProfile').then((profile) => {
const { current_org_roles: currentOrgRoles, role } = profile
const roles = rolec.parseUserRoles(currentOrgRoles, role)
+ commit('SET_SYS_ROLE', role)
commit('SET_ROLES', roles)
commit('SET_PERMS', rolec.sumPerms(roles))
resolve(roles)
diff --git a/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue b/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue
index aaeb1474f..5adb193f7 100644
--- a/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue
+++ b/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue
@@ -64,6 +64,16 @@ export default {
}
},
methods: {
+ getUrl() {
+ const params = this.$route.params
+ let url = `/api/v1/acls/login-asset-acls/`
+ if (params.id) {
+ url = `${url}${params.id}`
+ } else {
+ url = `${url}`
+ }
+ return url
+ },
getMethod() {
const params = this.$route.params
if (params.id) {
@@ -82,28 +92,26 @@ export default {
return validValues
},
performSubmit(validValues) {
- if (validValues.assets.ip_group) {
- console.log(validValues.assets.ip_group)
- validValues.assets.ip_group = validValues.assets.ip_group.split(',')
+ if (!Array.isArray(validValues.assets.ip_group)) {
+ validValues.assets.ip_group = validValues.assets.ip_group ? validValues.assets.ip_group.split(',') : []
}
- if (validValues.assets.hostname_group) {
- validValues.assets.hostname_group = validValues.assets.hostname_group.split(',')
+ if (!Array.isArray(validValues.assets.hostname_group)) {
+ validValues.assets.hostname_group = validValues.assets.hostname_group ? validValues.assets.hostname_group.split(',') : []
}
- if (validValues.system_users.protocol_group) {
- validValues.system_users.protocol_group = validValues.system_users.protocol_group.split(',')
+ if (!Array.isArray(validValues.system_users.protocol_group)) {
+ validValues.system_users.protocol_group = validValues.system_users.protocol_group ? validValues.system_users.protocol_group.split(',') : []
}
- if (validValues.system_users.name_group) {
- validValues.system_users.name_group = validValues.system_users.name_group.split(',')
+ if (!Array.isArray(validValues.system_users.name_group)) {
+ validValues.system_users.name_group = validValues.system_users.name_group ? validValues.system_users.name_group.split(',') : []
}
- if (validValues.system_users.username_group) {
- validValues.system_users.username_group = validValues.system_users.username_group.split(',')
+ if (!Array.isArray(validValues.system_users.username_group)) {
+ validValues.system_users.username_group = validValues.system_users.username_group ? validValues.system_users.username_group.split(',') : []
}
- if (validValues.users.username_group) {
- validValues.users.username_group = validValues.users.username_group.split(',')
+ if (!Array.isArray(validValues.users.username_group)) {
+ validValues.users.username_group = validValues.users.username_group ? validValues.users.username_group.split(',') : []
}
- const baseUrl = `/api/v1/acls/login-asset-acls/`
const method = this.getMethod()
- return this.$axios[method](`${baseUrl}`, validValues)
+ return this.$axios[method](`${this.getUrl()}`, validValues)
}
}
}
diff --git a/src/views/acl/AssetAcl/AssetAclList.vue b/src/views/acl/AssetAcl/AssetAclList.vue
index cc1cddb44..57118a531 100644
--- a/src/views/acl/AssetAcl/AssetAclList.vue
+++ b/src/views/acl/AssetAcl/AssetAclList.vue
@@ -22,6 +22,9 @@ export default {
user_username_group: {
prop: 'users.username_group',
showOverflowTooltip: true,
+ formatter: function(row) {
+ return {row.users.username_group.toString()}
+ },
label: this.$t('acl.username_group')
},
reviewers: {
@@ -29,23 +32,43 @@ export default {
},
hostname_group: {
prop: 'assets.hostname_group',
- label: this.$t('acl.hostname_group')
+ label: this.$t('acl.hostname_group'),
+ showOverflowTooltip: true,
+ formatter: function(row) {
+ return {row.assets.hostname_group.toString()}
+ }
},
ip_group: {
prop: 'assets.ip_group',
- label: this.$t('acl.asset_ip_group')
+ label: this.$t('acl.asset_ip_group'),
+ showOverflowTooltip: true,
+ formatter: function(row) {
+ return {row.assets.ip_group.toString()}
+ }
},
name_group: {
prop: 'system_users.name_group',
- label: this.$t('acl.system_users_name_group')
+ label: this.$t('acl.system_users_name_group'),
+ showOverflowTooltip: true,
+ formatter: function(row) {
+ return {row.system_users.name_group.toString()}
+ }
},
protocol_group: {
prop: 'system_users.protocol_group',
- label: this.$t('acl.system_users_protocol_group')
+ label: this.$t('acl.system_users_protocol_group'),
+ showOverflowTooltip: true,
+ formatter: function(row) {
+ return {row.system_users.protocol_group.toString()}
+ }
},
systemuser_username_group: {
prop: 'system_users.username_group',
- label: this.$t('acl.system_users_username_group')
+ label: this.$t('acl.system_users_username_group'),
+ showOverflowTooltip: true,
+ formatter: function(row) {
+ return {row.system_users.username_group.toString()}
+ }
}
}
},
diff --git a/src/views/acl/UserAcl/UserAclCreateUpdate.vue b/src/views/acl/UserAcl/UserAclCreateUpdate.vue
index 849599fc8..b1739b62a 100644
--- a/src/views/acl/UserAcl/UserAclCreateUpdate.vue
+++ b/src/views/acl/UserAcl/UserAclCreateUpdate.vue
@@ -76,11 +76,11 @@ export default {
return validValues
},
performSubmit(validValues) {
- if (validValues.ip_group) {
- validValues.ip_group = validValues.ip_group.split(',')
+ if (!Array.isArray(validValues.ip_group)) {
+ validValues.ip_group = validValues.ip_group ? validValues.ip_group.split(',') : []
}
const method = this.getMethod()
- return this.$axios[method](`${this.getUrl()}}`, validValues)
+ return this.$axios[method](`${this.getUrl()}`, validValues)
}
}
}
diff --git a/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue b/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue
index f1c72f18c..8e0c02ad0 100644
--- a/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue
+++ b/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue
@@ -2,7 +2,7 @@
diff --git a/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue b/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue
index 3b9991b8e..acb1cad4d 100644
--- a/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue
+++ b/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue
@@ -16,7 +16,7 @@
import QuickActions from '@/components/QuickActions/index'
import ListTable from '@/components/ListTable'
import RelationCard from '@/components/RelationCard'
-import { BooleanFormatter } from '@/components/ListTable/formatters'
+import { ChoicesFormatter } from '@/components/ListTable/formatters'
export default {
name: 'AssetList',
@@ -44,7 +44,7 @@ export default {
},
connectivity: {
label: this.$t('assets.Reachable'),
- formatter: BooleanFormatter,
+ formatter: ChoicesFormatter,
formatterArgs: {
iconChoices: {
0: 'fa-times text-danger',
diff --git a/src/views/assets/AdminUser/AdminUserDetail/Detail.vue b/src/views/assets/AdminUser/AdminUserDetail/Detail.vue
index 4cdc74e4c..748e08a51 100644
--- a/src/views/assets/AdminUser/AdminUserDetail/Detail.vue
+++ b/src/views/assets/AdminUser/AdminUserDetail/Detail.vue
@@ -3,22 +3,17 @@
-
-
-