diff options
Diffstat (limited to 'src/views/AccessControl/LocalUserManagement')
5 files changed, 0 insertions, 1094 deletions
diff --git a/src/views/AccessControl/LocalUserManagement/LocalUserManagement.vue b/src/views/AccessControl/LocalUserManagement/LocalUserManagement.vue deleted file mode 100644 index fb5ba16e..00000000 --- a/src/views/AccessControl/LocalUserManagement/LocalUserManagement.vue +++ /dev/null @@ -1,386 +0,0 @@ -<template> - <b-container fluid="xl"> - <page-title /> - <b-row> - <b-col xl="9" class="text-right"> - <b-button variant="link" @click="initModalSettings"> - <icon-settings /> - {{ $t('pageLocalUserManagement.accountPolicySettings') }} - </b-button> - <b-button - variant="primary" - data-test-id="localUserManagement-button-addUser" - @click="initModalUser(null)" - > - <icon-add /> - {{ $t('pageLocalUserManagement.addUser') }} - </b-button> - </b-col> - </b-row> - <b-row> - <b-col xl="9"> - <table-toolbar - ref="toolbar" - :selected-items-count="selectedRows.length" - :actions="tableToolbarActions" - @clear-selected="clearSelectedRows($refs.table)" - @batch-action="onBatchAction" - /> - <b-table - ref="table" - responsive="md" - selectable - show-empty - no-select-on-click - hover - :fields="fields" - :items="tableItems" - :empty-text="$t('global.table.emptyMessage')" - @row-selected="onRowSelected($event, tableItems.length)" - > - <!-- Checkbox column --> - <template #head(checkbox)> - <b-form-checkbox - v-model="tableHeaderCheckboxModel" - data-test-id="localUserManagement-checkbox-tableHeaderCheckbox" - :indeterminate="tableHeaderCheckboxIndeterminate" - @change="onChangeHeaderCheckbox($refs.table)" - > - <span class="sr-only">{{ $t('global.table.selectAll') }}</span> - </b-form-checkbox> - </template> - <template #cell(checkbox)="row"> - <b-form-checkbox - v-model="row.rowSelected" - data-test-id="localUserManagement-checkbox-toggleSelectRow" - @change="toggleSelectRow($refs.table, row.index)" - > - <span class="sr-only">{{ $t('global.table.selectItem') }}</span> - </b-form-checkbox> - </template> - - <!-- table actions column --> - <template #cell(actions)="{ item }"> - <table-row-action - v-for="(action, index) in item.actions" - :key="index" - :value="action.value" - :enabled="action.enabled" - :title="action.title" - @click-table-action="onTableRowAction($event, item)" - > - <template #icon> - <icon-edit - v-if="action.value === 'edit'" - :data-test-id="`localUserManagement-tableRowAction-edit-${index}`" - /> - <icon-trashcan - v-if="action.value === 'delete'" - :data-test-id="`localUserManagement-tableRowAction-delete-${index}`" - /> - </template> - </table-row-action> - </template> - </b-table> - </b-col> - </b-row> - <b-row> - <b-col xl="8"> - <b-button - v-b-toggle.collapse-role-table - data-test-id="localUserManagement-button-viewPrivilegeRoleDescriptions" - variant="link" - class="mt-3" - > - <icon-chevron /> - {{ $t('pageLocalUserManagement.viewPrivilegeRoleDescriptions') }} - </b-button> - <b-collapse id="collapse-role-table" class="mt-3"> - <table-roles /> - </b-collapse> - </b-col> - </b-row> - <!-- Modals --> - <modal-settings :settings="settings" @ok="saveAccountSettings" /> - <modal-user - :user="activeUser" - :password-requirements="passwordRequirements" - @ok="saveUser" - @hidden="activeUser = null" - /> - </b-container> -</template> - -<script> -import IconTrashcan from '@carbon/icons-vue/es/trash-can/20'; -import IconEdit from '@carbon/icons-vue/es/edit/20'; -import IconAdd from '@carbon/icons-vue/es/add--alt/20'; -import IconSettings from '@carbon/icons-vue/es/settings/20'; -import IconChevron from '@carbon/icons-vue/es/chevron--up/20'; - -import ModalUser from './ModalUser'; -import ModalSettings from './ModalSettings'; -import PageTitle from '@/components/Global/PageTitle'; -import TableRoles from './TableRoles'; -import TableToolbar from '@/components/Global/TableToolbar'; -import TableRowAction from '@/components/Global/TableRowAction'; - -import BVTableSelectableMixin, { - selectedRows, - tableHeaderCheckboxModel, - tableHeaderCheckboxIndeterminate, -} from '@/components/Mixins/BVTableSelectableMixin'; -import BVToastMixin from '@/components/Mixins/BVToastMixin'; -import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin'; - -export default { - name: 'LocalUsers', - components: { - IconAdd, - IconChevron, - IconEdit, - IconSettings, - IconTrashcan, - ModalSettings, - ModalUser, - PageTitle, - TableRoles, - TableRowAction, - TableToolbar, - }, - mixins: [BVTableSelectableMixin, BVToastMixin, LoadingBarMixin], - beforeRouteLeave(to, from, next) { - this.hideLoader(); - next(); - }, - data() { - return { - activeUser: null, - fields: [ - { - key: 'checkbox', - }, - { - key: 'username', - label: this.$t('pageLocalUserManagement.table.username'), - }, - { - key: 'privilege', - label: this.$t('pageLocalUserManagement.table.privilege'), - }, - { - key: 'status', - label: this.$t('pageLocalUserManagement.table.status'), - }, - { - key: 'actions', - label: '', - tdClass: 'text-right text-nowrap', - }, - ], - tableToolbarActions: [ - { - value: 'delete', - label: this.$t('global.action.delete'), - }, - { - value: 'enable', - label: this.$t('global.action.enable'), - }, - { - value: 'disable', - label: this.$t('global.action.disable'), - }, - ], - selectedRows: selectedRows, - tableHeaderCheckboxModel: tableHeaderCheckboxModel, - tableHeaderCheckboxIndeterminate: tableHeaderCheckboxIndeterminate, - }; - }, - computed: { - allUsers() { - return this.$store.getters['localUsers/allUsers']; - }, - tableItems() { - // transform user data to table data - return this.allUsers.map((user) => { - return { - username: user.UserName, - privilege: user.RoleId, - status: user.Locked - ? 'Locked' - : user.Enabled - ? 'Enabled' - : 'Disabled', - actions: [ - { - value: 'edit', - enabled: true, - title: this.$t('pageLocalUserManagement.editUser'), - }, - { - value: 'delete', - enabled: user.UserName === 'root' ? false : true, - title: this.$tc('pageLocalUserManagement.deleteUser'), - }, - ], - ...user, - }; - }); - }, - settings() { - return this.$store.getters['localUsers/accountSettings']; - }, - passwordRequirements() { - return this.$store.getters['localUsers/accountPasswordRequirements']; - }, - }, - created() { - this.startLoader(); - this.$store.dispatch('localUsers/getUsers').finally(() => this.endLoader()); - this.$store.dispatch('localUsers/getAccountSettings'); - this.$store.dispatch('localUsers/getAccountRoles'); - }, - methods: { - initModalUser(user) { - this.activeUser = user; - this.$bvModal.show('modal-user'); - }, - initModalDelete(user) { - this.$bvModal - .msgBoxConfirm( - this.$t('pageLocalUserManagement.modal.deleteConfirmMessage', { - user: user.username, - }), - { - title: this.$tc('pageLocalUserManagement.deleteUser'), - okTitle: this.$tc('pageLocalUserManagement.deleteUser'), - cancelTitle: this.$t('global.action.cancel'), - } - ) - .then((deleteConfirmed) => { - if (deleteConfirmed) { - this.deleteUser(user); - } - }); - }, - initModalSettings() { - this.$bvModal.show('modal-settings'); - }, - saveUser({ isNewUser, userData }) { - this.startLoader(); - if (isNewUser) { - this.$store - .dispatch('localUsers/createUser', userData) - .then((success) => this.successToast(success)) - .catch(({ message }) => this.errorToast(message)) - .finally(() => this.endLoader()); - } else { - this.$store - .dispatch('localUsers/updateUser', userData) - .then((success) => this.successToast(success)) - .catch(({ message }) => this.errorToast(message)) - .finally(() => this.endLoader()); - } - }, - deleteUser({ username }) { - this.startLoader(); - this.$store - .dispatch('localUsers/deleteUser', username) - .then((success) => this.successToast(success)) - .catch(({ message }) => this.errorToast(message)) - .finally(() => this.endLoader()); - }, - onBatchAction(action) { - switch (action) { - case 'delete': - this.$bvModal - .msgBoxConfirm( - this.$tc( - 'pageLocalUserManagement.modal.batchDeleteConfirmMessage', - this.selectedRows.length - ), - { - title: this.$tc( - 'pageLocalUserManagement.deleteUser', - this.selectedRows.length - ), - okTitle: this.$tc( - 'pageLocalUserManagement.deleteUser', - this.selectedRows.length - ), - cancelTitle: this.$t('global.action.cancel'), - } - ) - .then((deleteConfirmed) => { - if (deleteConfirmed) { - this.startLoader(); - this.$store - .dispatch('localUsers/deleteUsers', this.selectedRows) - .then((messages) => { - messages.forEach(({ type, message }) => { - if (type === 'success') this.successToast(message); - if (type === 'error') this.errorToast(message); - }); - }) - .finally(() => this.endLoader()); - } - }); - break; - case 'enable': - this.startLoader(); - this.$store - .dispatch('localUsers/enableUsers', this.selectedRows) - .then((messages) => { - messages.forEach(({ type, message }) => { - if (type === 'success') this.successToast(message); - if (type === 'error') this.errorToast(message); - }); - }) - .finally(() => this.endLoader()); - break; - case 'disable': - this.startLoader(); - this.$store - .dispatch('localUsers/disableUsers', this.selectedRows) - .then((messages) => { - messages.forEach(({ type, message }) => { - if (type === 'success') this.successToast(message); - if (type === 'error') this.errorToast(message); - }); - }) - .finally(() => this.endLoader()); - break; - } - }, - onTableRowAction(action, row) { - switch (action) { - case 'edit': - this.initModalUser(row); - break; - case 'delete': - this.initModalDelete(row); - break; - default: - break; - } - }, - saveAccountSettings(settings) { - this.startLoader(); - this.$store - .dispatch('localUsers/saveAccountSettings', settings) - .then((message) => this.successToast(message)) - .catch(({ message }) => this.errorToast(message)) - .finally(() => this.endLoader()); - }, - }, -}; -</script> - -<style lang="scss" scoped> -.btn.collapsed { - svg { - transform: rotate(180deg); - } -} -</style> diff --git a/src/views/AccessControl/LocalUserManagement/ModalSettings.vue b/src/views/AccessControl/LocalUserManagement/ModalSettings.vue deleted file mode 100644 index bf274e5a..00000000 --- a/src/views/AccessControl/LocalUserManagement/ModalSettings.vue +++ /dev/null @@ -1,219 +0,0 @@ -<template> - <b-modal - id="modal-settings" - ref="modal" - :title="$t('pageLocalUserManagement.accountPolicySettings')" - @hidden="resetForm" - > - <b-form id="form-settings" novalidate @submit.prevent="handleSubmit"> - <b-container> - <b-row> - <b-col> - <b-form-group - :label=" - $t('pageLocalUserManagement.modal.maxFailedLoginAttempts') - " - label-for="lockout-threshold" - > - <b-form-text id="lockout-threshold-help-block"> - {{ - $t('global.form.valueMustBeBetween', { - min: 0, - max: 65535, - }) - }} - </b-form-text> - <b-form-input - id="lockout-threshold" - v-model.number="form.lockoutThreshold" - type="number" - aria-describedby="lockout-threshold-help-block" - data-test-id="localUserManagement-input-lockoutThreshold" - :state="getValidationState($v.form.lockoutThreshold)" - @input="$v.form.lockoutThreshold.$touch()" - /> - <b-form-invalid-feedback role="alert"> - <template v-if="!$v.form.lockoutThreshold.required"> - {{ $t('global.form.fieldRequired') }} - </template> - <template - v-if=" - !$v.form.lockoutThreshold.minLength || - !$v.form.lockoutThreshold.maxLength - " - > - {{ - $t('global.form.valueMustBeBetween', { - min: 0, - max: 65535, - }) - }} - </template> - </b-form-invalid-feedback> - </b-form-group> - </b-col> - <b-col> - <b-form-group - :label="$t('pageLocalUserManagement.modal.userUnlockMethod')" - > - <b-form-radio - v-model="form.unlockMethod" - name="unlock-method" - class="mb-2" - :value="0" - data-test-id="localUserManagement-radio-manualUnlock" - @input="$v.form.unlockMethod.$touch()" - > - {{ $t('pageLocalUserManagement.modal.manual') }} - </b-form-radio> - <b-form-radio - v-model="form.unlockMethod" - name="unlock-method" - :value="1" - data-test-id="localUserManagement-radio-automaticUnlock" - @input="$v.form.unlockMethod.$touch()" - > - {{ $t('pageLocalUserManagement.modal.automaticAfterTimeout') }} - </b-form-radio> - <div class="mt-3 ml-4"> - <b-form-text id="lockout-duration-help-block"> - {{ - $t('pageLocalUserManagement.modal.timeoutDurationSeconds') - }} - </b-form-text> - <b-form-input - v-model.number="form.lockoutDuration" - aria-describedby="lockout-duration-help-block" - type="number" - data-test-id="localUserManagement-input-lockoutDuration" - :state="getValidationState($v.form.lockoutDuration)" - :readonly="$v.form.unlockMethod.$model === 0" - @input="$v.form.lockoutDuration.$touch()" - /> - <b-form-invalid-feedback role="alert"> - <template v-if="!$v.form.lockoutDuration.required"> - {{ $t('global.form.fieldRequired') }} - </template> - <template v-else-if="!$v.form.lockoutDuration.minvalue"> - {{ $t('global.form.mustBeAtLeast', { value: 1 }) }} - </template> - </b-form-invalid-feedback> - </div> - </b-form-group> - </b-col> - </b-row> - </b-container> - </b-form> - <template #modal-footer="{ cancel }"> - <b-button - variant="secondary" - data-test-id="localUserManagement-button-cancel" - @click="cancel()" - > - {{ $t('global.action.cancel') }} - </b-button> - <b-button - form="form-settings" - type="submit" - variant="primary" - data-test-id="localUserManagement-button-submit" - @click="onOk" - > - {{ $t('global.action.save') }} - </b-button> - </template> - </b-modal> -</template> - -<script> -import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js'; -import { - required, - requiredIf, - minValue, - maxValue, -} from 'vuelidate/lib/validators'; - -export default { - mixins: [VuelidateMixin], - props: { - settings: { - type: Object, - required: true, - }, - }, - data() { - return { - form: { - lockoutThreshold: 0, - unlockMethod: 0, - lockoutDuration: null, - }, - }; - }, - watch: { - settings: function ({ lockoutThreshold, lockoutDuration }) { - this.form.lockoutThreshold = lockoutThreshold; - this.form.unlockMethod = lockoutDuration ? 1 : 0; - this.form.lockoutDuration = lockoutDuration ? lockoutDuration : null; - }, - }, - validations: { - form: { - lockoutThreshold: { - minValue: minValue(0), - maxValue: maxValue(65535), - required, - }, - unlockMethod: { required }, - lockoutDuration: { - minValue: function (value) { - return this.form.unlockMethod === 0 || value > 0; - }, - required: requiredIf(function () { - return this.form.unlockMethod === 1; - }), - }, - }, - }, - methods: { - handleSubmit() { - this.$v.$touch(); - if (this.$v.$invalid) return; - - let lockoutThreshold; - let lockoutDuration; - if (this.$v.form.lockoutThreshold.$dirty) { - lockoutThreshold = this.form.lockoutThreshold; - } - if (this.$v.form.unlockMethod.$dirty) { - lockoutDuration = this.form.unlockMethod - ? this.form.lockoutDuration - : 0; - } - - this.$emit('ok', { lockoutThreshold, lockoutDuration }); - this.closeModal(); - }, - onOk(bvModalEvt) { - // prevent modal close - bvModalEvt.preventDefault(); - this.handleSubmit(); - }, - closeModal() { - this.$nextTick(() => { - this.$refs.modal.hide(); - }); - }, - resetForm() { - // Reset form models - this.form.lockoutThreshold = this.settings.lockoutThreshold; - this.form.unlockMethod = this.settings.lockoutDuration ? 1 : 0; - this.form.lockoutDuration = this.settings.lockoutDuration - ? this.settings.lockoutDuration - : null; - this.$v.$reset(); // clear validations - }, - }, -}; -</script> diff --git a/src/views/AccessControl/LocalUserManagement/ModalUser.vue b/src/views/AccessControl/LocalUserManagement/ModalUser.vue deleted file mode 100644 index 202ae8e6..00000000 --- a/src/views/AccessControl/LocalUserManagement/ModalUser.vue +++ /dev/null @@ -1,395 +0,0 @@ -<template> - <b-modal id="modal-user" ref="modal" @hidden="resetForm"> - <template #modal-title> - <template v-if="newUser"> - {{ $t('pageLocalUserManagement.addUser') }} - </template> - <template v-else> - {{ $t('pageLocalUserManagement.editUser') }} - </template> - </template> - <b-form id="form-user" novalidate @submit.prevent="handleSubmit"> - <b-container> - <!-- Manual unlock form control --> - <b-row v-if="!newUser && manualUnlockPolicy && user.Locked"> - <b-col sm="9"> - <alert :show="true" variant="warning" small> - <template v-if="!$v.form.manualUnlock.$dirty"> - {{ $t('pageLocalUserManagement.modal.accountLocked') }} - </template> - <template v-else> - {{ - $t('pageLocalUserManagement.modal.clickSaveToUnlockAccount') - }} - </template> - </alert> - </b-col> - <b-col sm="3"> - <input - v-model="form.manualUnlock" - data-test-id="localUserManagement-input-manualUnlock" - type="hidden" - value="false" - /> - <b-button - variant="primary" - :disabled="$v.form.manualUnlock.$dirty" - data-test-id="localUserManagement-button-manualUnlock" - @click="$v.form.manualUnlock.$touch()" - > - {{ $t('pageLocalUserManagement.modal.unlock') }} - </b-button> - </b-col> - </b-row> - <b-row> - <b-col> - <b-form-group - :label="$t('pageLocalUserManagement.modal.accountStatus')" - > - <b-form-radio - v-model="form.status" - name="user-status" - :value="true" - data-test-id="localUserManagement-radioButton-statusEnabled" - @input="$v.form.status.$touch()" - > - {{ $t('global.status.enabled') }} - </b-form-radio> - <b-form-radio - v-model="form.status" - name="user-status" - data-test-id="localUserManagement-radioButton-statusDisabled" - :value="false" - @input="$v.form.status.$touch()" - > - {{ $t('global.status.disabled') }} - </b-form-radio> - </b-form-group> - <b-form-group - :label="$t('pageLocalUserManagement.modal.username')" - label-for="username" - > - <b-form-text id="username-help-block"> - {{ $t('pageLocalUserManagement.modal.cannotStartWithANumber') }} - <br /> - {{ - $t( - 'pageLocalUserManagement.modal.noSpecialCharactersExceptUnderscore' - ) - }} - </b-form-text> - <b-form-input - id="username" - v-model="form.username" - type="text" - aria-describedby="username-help-block" - data-test-id="localUserManagement-input-username" - :state="getValidationState($v.form.username)" - :disabled="!newUser && originalUsername === 'root'" - @input="$v.form.username.$touch()" - /> - <b-form-invalid-feedback role="alert"> - <template v-if="!$v.form.username.required"> - {{ $t('global.form.fieldRequired') }} - </template> - <template v-else-if="!$v.form.username.maxLength"> - {{ - $t('global.form.lengthMustBeBetween', { min: 1, max: 16 }) - }} - </template> - <template v-else-if="!$v.form.username.pattern"> - {{ $t('global.form.invalidFormat') }} - </template> - </b-form-invalid-feedback> - </b-form-group> - <b-form-group - :label="$t('pageLocalUserManagement.modal.privilege')" - label-for="privilege" - > - <b-form-select - id="privilege" - v-model="form.privilege" - :options="privilegeTypes" - data-test-id="localUserManagement-select-privilege" - :state="getValidationState($v.form.privilege)" - @input="$v.form.privilege.$touch()" - > - <template #first> - <b-form-select-option :value="null" disabled> - {{ $t('global.form.selectAnOption') }} - </b-form-select-option> - </template> - </b-form-select> - <b-form-invalid-feedback role="alert"> - <template v-if="!$v.form.privilege.required"> - {{ $t('global.form.fieldRequired') }} - </template> - </b-form-invalid-feedback> - </b-form-group> - </b-col> - <b-col> - <b-form-group - :label="$t('pageLocalUserManagement.modal.userPassword')" - label-for="password" - > - <b-form-text id="password-help-block"> - {{ - $t('pageLocalUserManagement.modal.passwordMustBeBetween', { - min: passwordRequirements.minLength, - max: passwordRequirements.maxLength, - }) - }} - </b-form-text> - <input-password-toggle> - <b-form-input - id="password" - v-model="form.password" - type="password" - data-test-id="localUserManagement-input-password" - aria-describedby="password-help-block" - :state="getValidationState($v.form.password)" - class="form-control-with-button" - @input="$v.form.password.$touch()" - /> - <b-form-invalid-feedback role="alert"> - <template v-if="!$v.form.password.required"> - {{ $t('global.form.fieldRequired') }} - </template> - <template - v-if=" - !$v.form.password.minLength || !$v.form.password.maxLength - " - > - {{ - $t( - 'pageLocalUserManagement.modal.passwordMustBeBetween', - { - min: passwordRequirements.minLength, - max: passwordRequirements.maxLength, - } - ) - }} - </template> - </b-form-invalid-feedback> - </input-password-toggle> - </b-form-group> - <b-form-group - :label="$t('pageLocalUserManagement.modal.confirmUserPassword')" - label-for="password-confirmation" - > - <input-password-toggle> - <b-form-input - id="password-confirmation" - v-model="form.passwordConfirmation" - data-test-id="localUserManagement-input-passwordConfirmation" - type="password" - :state="getValidationState($v.form.passwordConfirmation)" - class="form-control-with-button" - @input="$v.form.passwordConfirmation.$touch()" - /> - <b-form-invalid-feedback role="alert"> - <template v-if="!$v.form.passwordConfirmation.required"> - {{ $t('global.form.fieldRequired') }} - </template> - <template - v-else-if="!$v.form.passwordConfirmation.sameAsPassword" - > - {{ - $t('pageLocalUserManagement.modal.passwordsDoNotMatch') - }} - </template> - </b-form-invalid-feedback> - </input-password-toggle> - </b-form-group> - </b-col> - </b-row> - </b-container> - </b-form> - <template #modal-footer="{ cancel }"> - <b-button - variant="secondary" - data-test-id="localUserManagement-button-cancel" - @click="cancel()" - > - {{ $t('global.action.cancel') }} - </b-button> - <b-button - form="form-user" - data-test-id="localUserManagement-button-submit" - type="submit" - variant="primary" - @click="onOk" - > - <template v-if="newUser"> - {{ $t('pageLocalUserManagement.addUser') }} - </template> - <template v-else> - {{ $t('global.action.save') }} - </template> - </b-button> - </template> - </b-modal> -</template> - -<script> -import { - required, - maxLength, - minLength, - sameAs, - helpers, - requiredIf, -} from 'vuelidate/lib/validators'; -import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js'; -import InputPasswordToggle from '@/components/Global/InputPasswordToggle'; -import Alert from '@/components/Global/Alert'; - -export default { - components: { Alert, InputPasswordToggle }, - mixins: [VuelidateMixin], - props: { - user: { - type: Object, - default: null, - }, - passwordRequirements: { - type: Object, - required: true, - }, - }, - data() { - return { - originalUsername: '', - form: { - status: true, - username: '', - privilege: null, - password: '', - passwordConfirmation: '', - manualUnlock: false, - }, - }; - }, - computed: { - newUser() { - return this.user ? false : true; - }, - accountSettings() { - return this.$store.getters['localUsers/accountSettings']; - }, - manualUnlockPolicy() { - return !this.accountSettings.accountLockoutDuration; - }, - privilegeTypes() { - return this.$store.getters['localUsers/accountRoles']; - }, - }, - watch: { - user: function (value) { - if (value === null) return; - this.originalUsername = value.username; - this.form.username = value.username; - this.form.status = value.Enabled; - this.form.privilege = value.privilege; - }, - }, - validations() { - return { - form: { - status: { - required, - }, - username: { - required, - maxLength: maxLength(16), - pattern: helpers.regex('pattern', /^([a-zA-Z_][a-zA-Z0-9_]*)/), - }, - privilege: { - required, - }, - password: { - required: requiredIf(function () { - return this.requirePassword(); - }), - minLength: minLength(this.passwordRequirements.minLength), - maxLength: maxLength(this.passwordRequirements.maxLength), - }, - passwordConfirmation: { - required: requiredIf(function () { - return this.requirePassword(); - }), - sameAsPassword: sameAs('password'), - }, - manualUnlock: {}, - }, - }; - }, - methods: { - handleSubmit() { - let userData = {}; - - if (this.newUser) { - this.$v.$touch(); - if (this.$v.$invalid) return; - userData.username = this.form.username; - userData.status = this.form.status; - userData.privilege = this.form.privilege; - userData.password = this.form.password; - } else { - if (this.$v.$invalid) return; - userData.originalUsername = this.originalUsername; - if (this.$v.form.status.$dirty) { - userData.status = this.form.status; - } - if (this.$v.form.username.$dirty) { - userData.username = this.form.username; - } - if (this.$v.form.privilege.$dirty) { - userData.privilege = this.form.privilege; - } - if (this.$v.form.password.$dirty) { - userData.password = this.form.password; - } - if (this.$v.form.manualUnlock.$dirty) { - // If form manualUnlock control $dirty then - // set user Locked property to false - userData.locked = false; - } - if (Object.entries(userData).length === 1) { - this.closeModal(); - return; - } - } - - this.$emit('ok', { isNewUser: this.newUser, userData }); - this.closeModal(); - }, - closeModal() { - this.$nextTick(() => { - this.$refs.modal.hide(); - }); - }, - resetForm() { - this.form.originalUsername = ''; - this.form.status = true; - this.form.username = ''; - this.form.privilege = null; - this.form.password = ''; - this.form.passwordConfirmation = ''; - this.$v.$reset(); - this.$emit('hidden'); - }, - requirePassword() { - if (this.newUser) return true; - if (this.$v.form.password.$dirty) return true; - if (this.$v.form.passwordConfirmation.$dirty) return true; - return false; - }, - onOk(bvModalEvt) { - // prevent modal close - bvModalEvt.preventDefault(); - this.handleSubmit(); - }, - }, -}; -</script> diff --git a/src/views/AccessControl/LocalUserManagement/TableRoles.vue b/src/views/AccessControl/LocalUserManagement/TableRoles.vue deleted file mode 100644 index 3993af02..00000000 --- a/src/views/AccessControl/LocalUserManagement/TableRoles.vue +++ /dev/null @@ -1,92 +0,0 @@ -<template> - <b-table stacked="sm" hover small :items="items" :fields="fields"> - <template #cell(administrator)="data"> - <template v-if="data.value"> - <checkmark20 /> - </template> - </template> - <template #cell(operator)="data"> - <template v-if="data.value"> - <checkmark20 /> - </template> - </template> - <template #cell(readonly)="data"> - <template v-if="data.value"> - <checkmark20 /> - </template> - </template> - <template #cell(noaccess)="data"> - <template v-if="data.value"> - <checkmark20 /> - </template> - </template> - </b-table> -</template> - -<script> -import Checkmark20 from '@carbon/icons-vue/es/checkmark/20'; - -export default { - components: { - Checkmark20, - }, - data() { - return { - items: [ - { - description: this.$t( - 'pageLocalUserManagement.tableRoles.configureComponentsManagedByThisService' - ), - administrator: true, - operator: true, - readonly: false, - noaccess: false, - }, - { - description: this.$t( - 'pageLocalUserManagement.tableRoles.configureManagerResources' - ), - administrator: true, - operator: false, - readonly: false, - noaccess: false, - }, - { - description: this.$t( - 'pageLocalUserManagement.tableRoles.updatePasswordForCurrentUserAccount' - ), - administrator: true, - operator: true, - readonly: true, - noaccess: false, - }, - { - description: this.$t( - 'pageLocalUserManagement.tableRoles.configureUsersAndTheirAccounts' - ), - administrator: true, - operator: false, - readonly: false, - noaccess: false, - }, - { - description: this.$t( - 'pageLocalUserManagement.tableRoles.logInToTheServiceAndReadResources' - ), - administrator: true, - operator: true, - readonly: true, - noaccess: false, - }, - ], - fields: [ - { key: 'description', label: 'Privilege' }, - { key: 'administrator', label: 'Administrator', class: 'text-center' }, - { key: 'operator', label: 'Operator', class: 'text-center' }, - { key: 'readonly', label: 'ReadOnly', class: 'text-center' }, - { key: 'noaccess', label: 'NoAccess', class: 'text-center' }, - ], - }; - }, -}; -</script> diff --git a/src/views/AccessControl/LocalUserManagement/index.js b/src/views/AccessControl/LocalUserManagement/index.js deleted file mode 100644 index 315748af..00000000 --- a/src/views/AccessControl/LocalUserManagement/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import LocalUserManagement from './LocalUserManagement.vue'; -export default LocalUserManagement; |