Add impersonate dialog

This commit is contained in:
Johannes Zellner
2025-02-12 15:54:04 +01:00
parent c9d875e3fa
commit da0dcf65b3
3 changed files with 105 additions and 1 deletions
+8 -1
View File
@@ -9,6 +9,7 @@ import { Button, ButtonGroup, TextInput, Dropdown, TableView, InputDialog } from
import { ROLES } from '../constants.js';
import Section from '../components/Section.vue';
import GroupDialog from '../components/GroupDialog.vue';
import ImpersonateDialog from '../components/ImpersonateDialog.vue';
import UsersModel from '../models/UsersModel.js';
import GroupsModel from '../models/GroupsModel.js';
import ProfileModel from '../models/ProfileModel.js';
@@ -48,6 +49,7 @@ const roles = ref([]);
const inputDialog = useTemplateRef('inputDialog');
const groupDialog = useTemplateRef('groupDialog');
const impersonateDialog = useTemplateRef('impersonateDialog');
const filteredUsers = computed(() => {
return users.value.filter(u => {
@@ -113,6 +115,10 @@ function groupMembers(group) {
return group.userIds.filter(function (uid) { return !!usersById.value[uid]; }).map(function (uid) { return usersById.value[uid].username || usersById.value[uid].email; }).join(' ');
}
function onImpersonate(user) {
impersonateDialog.value.open(user);
}
function onEditOrAddGroup(group = null) {
groupDialog.value.open(group);
}
@@ -177,6 +183,7 @@ onMounted(async () => {
<template>
<InputDialog ref="inputDialog" />
<GroupDialog ref="groupDialog" @success="refreshGroups()"/>
<ImpersonateDialog ref="impersonateDialog" />
<div class="content">
<Section :title="$t('main.navbar.users')">
@@ -207,7 +214,7 @@ onMounted(async () => {
<ButtonGroup>
<Button small tool secondary :disabled="!canEdit(user)" v-if="!user.inviteAccepted && !isMe(user) && !user.source" @click="invitation.show(user)" v-tooltip="$t('users.users.invitationTooltip')" icon="fa-solid fa-paper-plane" />
<Button small tool secondary :disabled="!canEdit(user)" v-if="user.inviteAccepted && !user.source" @click="passwordReset.show(user)" v-tooltip="$t('users.users.resetPasswordTooltip')" icon="fa-solid fa-key" />
<Button small tool secondary :disabled="!canImpersonate(user)" @click="setGhost.show(user)" v-tooltip="$t('users.users.setGhostTooltip')" icon="fa-solid fa-user-secret" />
<Button small tool secondary :disabled="!canImpersonate(user)" @click="onImpersonate(user)" v-tooltip="$t('users.users.setGhostTooltip')" icon="fa-solid fa-user-secret" />
<Button small tool secondary :disabled="!canEdit(user)" @click="userEdit.show(user)" v-tooltip="$t('users.users.editUserTooltip')" icon="fa fa-pencil-alt" />
</ButtonGroup>
<Button small tool danger :disabled="!canEdit(user) || isMe(user)" @click="onRemoveUser(user)" v-tooltip="$t('users.users.removeUserTooltip')" icon="far fa-trash-alt" />