| <template> |
| <b-container class="ml-0"> |
| <PageTitle /> |
| <b-row> |
| <b-col lg="10"> |
| <b-button @click="initModalSettings" variant="link"> |
| Account policy settings |
| <icon-settings /> |
| </b-button> |
| <b-button @click="initModalUser(null)" variant="primary"> |
| Add user |
| <icon-add /> |
| </b-button> |
| </b-col> |
| </b-row> |
| <b-row> |
| <b-col lg="10"> |
| <b-table bordered show-empty head-variant="dark" :items="tableItems"> |
| <template v-slot:head(actions)="data"></template> |
| <template v-slot:cell(actions)="data"> |
| <b-button |
| aria-label="Edit user" |
| variant="link" |
| :disabled="!data.value.edit" |
| @click="initModalUser(data.item)" |
| > |
| <icon-edit /> |
| </b-button> |
| <b-button |
| aria-label="Delete user" |
| variant="link" |
| :disabled="!data.value.delete" |
| @click="initModalDelete(data.item)" |
| > |
| <icon-trashcan /> |
| </b-button> |
| </template> |
| </b-table> |
| </b-col> |
| </b-row> |
| <b-row> |
| <b-col lg="8"> |
| <b-button v-b-toggle.collapse-role-table variant="link" class="mt-3"> |
| View privilege role descriptions |
| </b-button> |
| <b-collapse id="collapse-role-table" class="mt-3"> |
| <table-roles /> |
| </b-collapse> |
| </b-col> |
| </b-row> |
| <!-- Modals --> |
| <modal-settings v-bind:settings="settings"></modal-settings> |
| <modal-user |
| v-bind:user="activeUser" |
| @ok="saveUser" |
| @hidden="clearActiveUser" |
| ></modal-user> |
| </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 TableRoles from './TableRoles'; |
| import ModalUser from './ModalUser'; |
| import ModalSettings from './ModalSettings'; |
| import PageTitle from '../../../components/Global/PageTitle'; |
| |
| export default { |
| name: 'local-users', |
| components: { |
| IconAdd, |
| IconEdit, |
| IconSettings, |
| IconTrashcan, |
| ModalSettings, |
| ModalUser, |
| TableRoles, |
| PageTitle |
| }, |
| data() { |
| return { |
| activeUser: null, |
| settings: null |
| }; |
| }, |
| created() { |
| this.getUsers(); |
| }, |
| 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: { |
| edit: true, |
| delete: user.UserName === 'root' ? false : true |
| } |
| }; |
| }); |
| } |
| }, |
| methods: { |
| getUsers() { |
| this.$store.dispatch('localUsers/getUsers'); |
| }, |
| initModalUser(user) { |
| this.activeUser = user; |
| this.$bvModal.show('modal-user'); |
| }, |
| initModalDelete(user) { |
| this.$bvModal |
| .msgBoxConfirm( |
| `Are you sure you want to delete user '${user.username}'? This action cannot be undone.`, |
| { |
| title: 'Delete user', |
| okTitle: 'Delete user' |
| } |
| ) |
| .then(deleteConfirmed => { |
| if (deleteConfirmed) { |
| this.deleteUser(user); |
| } |
| }); |
| }, |
| initModalSettings() { |
| if (this.settings) { |
| this.$bvModal.show('modal-settings'); |
| } else { |
| // fetch settings then show modal |
| } |
| }, |
| saveUser({ newUser, form }) { |
| if (newUser) { |
| this.$store.dispatch('localUsers/createUser', form); |
| } else { |
| this.$store.dispatch('localUsers/updateUser', form); |
| } |
| }, |
| deleteUser({ username }) { |
| this.$store.dispatch('localUsers/deleteUser', username); |
| }, |
| clearActiveUser() { |
| this.activeUser = null; |
| } |
| } |
| }; |
| </script> |
| |
| <style lang="scss" scoped> |
| h1 { |
| margin-bottom: 2rem; |
| } |
| </style> |