From 04ddb8538fe89ba1e2c9bfe4a726bbf76ac2c7e6 Mon Sep 17 00:00:00 2001 From: Jannik Stehle <50302941+JammingBen@users.noreply.github.com> Date: Fri, 10 Mar 2023 13:42:00 +0100 Subject: [PATCH] Fix loading/editing users that do not have a role assignment (#8590) --- changelog/unreleased/bugfix-users-without-role-assignment | 6 ++++++ .../src/components/Users/SideBar/DetailsPanel.vue | 6 ++++-- .../src/components/Users/SideBar/EditPanel.vue | 8 ++++++-- .../src/components/Users/UsersList.vue | 6 ++++-- packages/web-app-admin-settings/src/views/Users.vue | 7 +++++-- 5 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 changelog/unreleased/bugfix-users-without-role-assignment diff --git a/changelog/unreleased/bugfix-users-without-role-assignment b/changelog/unreleased/bugfix-users-without-role-assignment new file mode 100644 index 00000000000..4954826b831 --- /dev/null +++ b/changelog/unreleased/bugfix-users-without-role-assignment @@ -0,0 +1,6 @@ +Bugfix: Users without role assignment + +Listing and editing users without a role assignment in the admin settings has been fixed. + +https://github.com/owncloud/web/issues/8585 +https://github.com/owncloud/web/pull/8590 diff --git a/packages/web-app-admin-settings/src/components/Users/SideBar/DetailsPanel.vue b/packages/web-app-admin-settings/src/components/Users/SideBar/DetailsPanel.vue index c5b3a23b57e..32f01ec0d10 100644 --- a/packages/web-app-admin-settings/src/components/Users/SideBar/DetailsPanel.vue +++ b/packages/web-app-admin-settings/src/components/Users/SideBar/DetailsPanel.vue @@ -118,8 +118,10 @@ export default defineComponent({ roleDisplayName() { const assignedRole = this.user.appRoleAssignments[0] - return this.$gettext( - this.roles.find((role) => role.id === assignedRole.appRoleId)?.displayName || '' + return ( + this.$gettext( + this.roles.find((role) => role.id === assignedRole?.appRoleId)?.displayName || '' + ) || '-' ) }, groupsDisplayValue() { diff --git a/packages/web-app-admin-settings/src/components/Users/SideBar/EditPanel.vue b/packages/web-app-admin-settings/src/components/Users/SideBar/EditPanel.vue index 7953cbe9ef5..d409982e99a 100644 --- a/packages/web-app-admin-settings/src/components/Users/SideBar/EditPanel.vue +++ b/packages/web-app-admin-settings/src/components/Users/SideBar/EditPanel.vue @@ -205,9 +205,9 @@ export default defineComponent({ return cloneDeep(this.user) }, selectedRoleName() { + const assignedRole = this.editUser.appRoleAssignments[0] return this.$gettext( - this.roles.find((role) => role.id === this.editUser.appRoleAssignments[0].appRoleId) - .displayName + this.roles.find((role) => role.id === assignedRole?.appRoleId)?.displayName || '' ) } }, @@ -313,6 +313,10 @@ export default defineComponent({ }) }, onUpdateRole(role) { + if (!this.editUser.appRoleAssignments.length) { + this.editUser.appRoleAssignments.push({ appRoleId: role.id, displayName: role.displayName }) + return + } this.editUser.appRoleAssignments[0].appRoleId = role.id }, onUpdatePassword(password) { diff --git a/packages/web-app-admin-settings/src/components/Users/UsersList.vue b/packages/web-app-admin-settings/src/components/Users/UsersList.vue index d2fbbb57e13..debfa2f371b 100644 --- a/packages/web-app-admin-settings/src/components/Users/UsersList.vue +++ b/packages/web-app-admin-settings/src/components/Users/UsersList.vue @@ -346,8 +346,10 @@ export default defineComponent({ getRoleDisplayNameByUser(user) { const assignedRole = user.appRoleAssignments[0] - return this.$gettext( - this.roles.find((role) => role.id === assignedRole.appRoleId)?.displayName || '' + return ( + this.$gettext( + this.roles.find((role) => role.id === assignedRole?.appRoleId)?.displayName || '' + ) || '-' ) } } diff --git a/packages/web-app-admin-settings/src/views/Users.vue b/packages/web-app-admin-settings/src/views/Users.vue index f3e53763e9c..a6bd6e1c7c9 100644 --- a/packages/web-app-admin-settings/src/views/Users.vue +++ b/packages/web-app-admin-settings/src/views/Users.vue @@ -229,6 +229,7 @@ export default defineComponent({ const roles = ref([]) const selectedUsers = ref([]) const additionalUserDataLoadedForUserIds = ref([]) + const applicationId = ref() const selectedUserIds = computed(() => unref(selectedUsers).map((selectedUser) => selectedUser.id) ) @@ -263,6 +264,7 @@ export default defineComponent({ const loadAppRolesTask = useTask(function* (signal) { const applicationsResponse = yield unref(graphClient).applications.listApplications() roles.value = applicationsResponse.data.value[0].appRoles + applicationId.value = applicationsResponse.data.value[0].id }) const loadUsersTask = useTask(function* (signal) { @@ -511,6 +513,7 @@ export default defineComponent({ users, roles, groups, + applicationId, loadResourcesTask, loadAdditionalUserDataTask, graphClient, @@ -648,7 +651,7 @@ export default defineComponent({ } if ( - !isEqual(user.appRoleAssignments[0].appRoleId, editUser.appRoleAssignments[0].appRoleId) + !isEqual(user.appRoleAssignments[0]?.appRoleId, editUser.appRoleAssignments[0]?.appRoleId) ) { await this.updateUserAppRoleAssignments(user, editUser) } @@ -693,7 +696,7 @@ export default defineComponent({ updateUserAppRoleAssignments(user, editUser) { return this.graphClient.users.createUserAppRoleAssignment(user.id, { appRoleId: editUser.appRoleAssignments[0].appRoleId, - resourceId: editUser.appRoleAssignments[0].resourceId, + resourceId: this.applicationId, principalId: editUser.id }) },