2 Commits

Author SHA1 Message Date
Adrian Zürcher
b726eb42dc add filter so user can not change to admin if the have the right to change user rights 2026-02-14 13:43:21 +01:00
Adrian Zürcher
8963cba016 fix update role not working 2026-02-14 13:42:54 +01:00
4 changed files with 30 additions and 5 deletions

View File

@@ -30,6 +30,9 @@
class="col-5 required" class="col-5 required"
:label="$t('role')" :label="$t('role')"
filled filled
option-label="role"
option-value="role"
emit-value
:options="props.roles" :options="props.roles"
:rules="[(val) => !!val || $t('roleIsRequired')]" :rules="[(val) => !!val || $t('roleIsRequired')]"
v-model="role" v-model="role"

View File

@@ -11,8 +11,15 @@
align="justify" align="justify"
narrow-indicator narrow-indicator
> >
<q-tab name="users" no-caps :label="$t('users')" /> <q-tab name="users" icon="people" no-caps :label="$t('users')" />
<q-tab name="roles" no-caps :label="$t('roles')" /> <q-tab name="roles" icon="rule" no-caps :label="$t('roles')" />
<q-tab
v-if="user?.user?.role.role.includes('admin')"
name="workspaces"
icon="dashboard"
no-caps
:label="$t('workspaces')"
/>
</q-tabs> </q-tabs>
<q-separator /> <q-separator />
@@ -23,16 +30,24 @@
<q-tab-panel name="roles" style="padding: 0px"> <q-tab-panel name="roles" style="padding: 0px">
<RoleTable /> <RoleTable />
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="workspaces" style="padding: 0px">
<RoleTable />
</q-tab-panel>
</q-tab-panels> </q-tab-panels>
</q-card> </q-card>
</div> </div>
{{ user?.user?.role }}
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { onMounted, ref } from 'vue';
import UserTable from 'src/vueLib/tables/users/UserTable.vue'; import UserTable from 'src/vueLib/tables/users/UserTable.vue';
import RoleTable from 'src/vueLib/tables/roles/RoleTable.vue'; import RoleTable from 'src/vueLib/tables/roles/RoleTable.vue';
import SiteTitle from 'src/vueLib/general/SiteTitle.vue'; import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
import { useUserStore } from 'src/vueLib/login/userStore';
import type { UserState } from 'src/vueLib/models/user';
const tab = ref('users'); const tab = ref('users');
const user = ref<UserState>();
onMounted(() => (user.value = useUserStore()));
</script> </script>

View File

@@ -6,6 +6,7 @@ export interface User {
user: string; user: string;
email: string; email: string;
role?: Role; role?: Role;
roleId?: number;
expiration?: string; expiration?: string;
password?: string; password?: string;
newPassword?: string; newPassword?: string;

View File

@@ -148,7 +148,7 @@
query-id query-id
v-on:update="(val) => updateUser(val)" v-on:update="(val) => updateUser(val)"
></EditOneDialog> ></EditOneDialog>
<EditAllDialog ref="editAllDialog" :roles="localRoles" v-on:update="updateUsers"></EditAllDialog> <EditAllDialog ref="editAllDialog" :roles="roles" v-on:update="updateUsers"></EditAllDialog>
<OkDialog <OkDialog
ref="okDialog" ref="okDialog"
:dialog-label="$t('delete')" :dialog-label="$t('delete')"
@@ -184,7 +184,10 @@ const editAllDialog = ref();
const okDialog = ref(); const okDialog = ref();
const deleteText = ref(''); const deleteText = ref('');
const localRoles = computed(() => { const localRoles = computed(() => {
return roles.value.map((role) => role.role); return roles.value.filter((role) => {
if (user.user?.role.role.includes('admin') || !user.user?.role.role.includes('admin'))
return role;
});
}); });
const selectOption = ref(false); const selectOption = ref(false);
const selected = ref<Users>([]); const selected = ref<Users>([]);
@@ -272,6 +275,9 @@ function removeUser(...removeUsers: Users) {
// update role select // update role select
function updateUser(user: User) { function updateUser(user: User) {
if (user.role?.id) {
user.roleId = user.role?.id;
}
appApi appApi
.post('/users/update', user) .post('/users/update', user)
.then(() => NotifyResponse(i18n.global.t('userUpdated'))) .then(() => NotifyResponse(i18n.global.t('userUpdated')))