blob: b81dba67df35ae099f8b0358d55bc86837ad1bf4 [file] [log] [blame]
<template>
<b-container class="ml-0">
<PageTitle />
<b-row>
<b-col lg="10" class="text-right">
<b-button variant="link" @click="initModalSettings">
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 show-empty :fields="fields" :items="tableItems">
<template v-slot:cell(actions)="data">
<b-button
aria-label="Edit user"
title="Edit user"
variant="link"
:disabled="!data.value.edit"
@click="initModalUser(data.item)"
>
<icon-edit />
</b-button>
<b-button
aria-label="Delete user"
title="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
<icon-chevron />
</b-button>
<b-collapse id="collapse-role-table" class="mt-3">
<table-roles />
</b-collapse>
</b-col>
</b-row>
<!-- Modals -->
<modal-settings :settings="settings"></modal-settings>
<modal-user :user="activeUser" @ok="saveUser"></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 IconChevron from '@carbon/icons-vue/es/chevron--up/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,
IconChevron,
IconEdit,
IconSettings,
IconTrashcan,
ModalSettings,
ModalUser,
TableRoles,
PageTitle
},
data() {
return {
activeUser: null,
settings: null,
fields: [
'username',
'privilege',
'status',
{
key: 'actions',
label: '',
tdClass: 'table-cell__actions'
}
]
};
},
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
},
...user
};
});
}
},
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({ isNewUser, userData }) {
if (isNewUser) {
this.$store.dispatch('localUsers/createUser', userData);
} else {
this.$store.dispatch('localUsers/updateUser', userData);
}
},
deleteUser({ username }) {
this.$store.dispatch('localUsers/deleteUser', username);
}
}
};
</script>
<style lang="scss" scoped>
h1 {
margin-bottom: 2rem;
}
.btn.collapsed {
svg {
transform: rotate(180deg);
}
}
</style>