// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. import { shallowRef, defineAsyncComponent } from 'vue' import store from '@/store' import { i18n } from '@/locales' export default { name: 'accountuser', title: 'label.users', icon: 'user-outlined', docHelp: 'adminguide/accounts.html#users', hidden: true, permission: ['listUsers'], searchFilters: () => { const filters = ['usersource'] if (store.getters.userInfo.roletype === 'Admin') { filters.push('apikeyaccess') } return filters }, columns: [ 'username', 'state', 'firstname', 'lastname', 'email', 'account', 'domain', { field: 'userSource', customTitle: 'userSource', userSource: (record) => { let { usersource: source } = record if (source === 'saml2') { source = 'saml' } else if (source === 'saml2disabled') { source = 'saml.disabled' } return i18n.global.t(`label.${source}`) } } ], details: ['username', 'id', 'firstname', 'lastname', 'email', 'usersource', 'timezone', 'rolename', 'roletype', 'is2faenabled', 'account', 'domain', 'created'], tabs: [ { name: 'details', component: shallowRef(defineAsyncComponent(() => import('@/components/view/DetailsTab.vue'))) }, { name: 'events', resourceType: 'User', component: shallowRef(defineAsyncComponent(() => import('@/components/view/EventsTab.vue'))), show: () => { return 'listEvents' in store.getters.apis } } ], actions: [ { api: 'createUser', icon: 'plus-outlined', label: 'label.add.user', listView: true, popup: true, component: shallowRef(defineAsyncComponent(() => import('@/views/iam/AddUser.vue'))) }, { api: 'updateUser', icon: 'edit-outlined', label: 'label.edit', dataView: true, popup: true, component: shallowRef(defineAsyncComponent(() => import('@/views/iam/EditUser.vue'))) }, { api: 'updateUser', icon: 'key-outlined', label: 'label.action.change.password', dataView: true, popup: true, component: shallowRef(defineAsyncComponent(() => import('@/views/iam/ChangeUserPassword.vue'))) }, { api: 'registerUserKeys', icon: 'file-protect-outlined', label: 'label.action.generate.keys', hoverLabel: 'label.action.generate.api.secret.keys', message: 'message.generate.keys', dataView: true }, { api: 'enableUser', icon: 'play-circle-outlined', label: 'label.action.enable.user', message: 'message.enable.user', dataView: true, show: (record, store) => { return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault && !(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) && ['disabled', 'locked'].includes(record.state) } }, { api: 'disableUser', icon: 'pause-circle-outlined', label: 'label.action.disable.user', message: 'message.disable.user', dataView: true, show: (record, store) => { return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault && !(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) && record.state === 'enabled' } }, { api: 'lockUser', icon: 'LockOutlined', label: 'label.action.lock.user', message: (record) => ['message.lock.user', { user: record.username }], successMessage: (record) => ['message.lock.user.success', { user: record.username }], dataView: true, popup: true, show: (record, store) => { return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault && !(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) && record.state === 'enabled' } }, { api: 'authorizeSamlSso', icon: 'form-outlined', label: 'Configure SAML SSO Authorization', dataView: true, popup: true, show: (record, store) => { return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) }, component: shallowRef(defineAsyncComponent(() => import('@/views/iam/ConfigureSamlSsoAuth.vue'))) }, { api: 'setupUserTwoFactorAuthentication', icon: 'scan-outlined', label: 'label.action.setup.2FA.user.auth', dataView: true, popup: true, show: (record, store) => { return (record.is2faenabled === false && record.id === store.userInfo.id) }, component: shallowRef(defineAsyncComponent(() => import('@/views/iam/SetupTwoFaAtUserProfile.vue'))) }, { api: 'setupUserTwoFactorAuthentication', icon: 'scan-outlined', label: 'label.action.disable.2FA.user.auth', message: (record) => { return record.is2famandated === true ? 'message.action.about.mandate.and.disable.2FA.user.auth' : 'message.action.disable.2FA.user.auth' }, dataView: true, groupAction: true, popup: true, args: ['enable', 'userid'], mapping: { enable: { value: (record) => { return false } }, userid: { value: (record) => { return record.id } } }, show: (record, store) => { return (record.is2faenabled === true) && (record.id === store.userInfo.id || ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype)) } }, { api: 'deleteUser', icon: 'delete-outlined', label: 'label.action.delete.user', message: 'message.delete.user', dataView: true, disabled: (record, store) => { return record.id !== 'undefined' && store.userInfo.id === record.id } } ] }