From 742892d889e7ed649ca3732d03422186b911c864 Mon Sep 17 00:00:00 2001 From: tammi-23 Date: Tue, 26 Aug 2025 15:36:04 +0200 Subject: [PATCH 1/4] feat: hide Login allowed for users --- .../components/Users/SideBar/DetailsPanel.vue | 23 +++++++++---- .../components/Users/SideBar/EditPanel.vue | 9 +++++- .../src/components/Users/UsersList.vue | 32 ++++++++++++------- .../src/composables/useAdminUsersFlags.ts | 26 +++++++++++++++ .../src/views/Users.vue | 10 ++++-- 5 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts 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 bbb6b515bc..cb81b589a7 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 @@ -34,8 +34,12 @@ /> -
{{ $gettext('Login') }}
-
{{ loginDisplayValue }}
+ + +
{{ $gettext('Quota') }}
@@ -69,7 +73,7 @@ import { computed, defineComponent, PropType } from 'vue' import UserInfoBox from './UserInfoBox.vue' import { AppRole, User } from '@opencloud-eu/web-client/graph/generated' -import { formatFileSize } from '@opencloud-eu/web-pkg' +import { formatFileSize, useCapabilityStore } from '@opencloud-eu/web-pkg' import { useGettext } from 'vue3-gettext' export default defineComponent({ @@ -94,12 +98,19 @@ export default defineComponent({ }, setup() { const language = useGettext() - const currentLanguage = computed(() => { - return language.current + const currentLanguage = computed(() => language.current) + + const capabilityStore = useCapabilityStore() + const isLoginToggleHidden = computed(() => { + const list = (capabilityStore.graphUsersReadOnlyAttributes ?? []).map((s: string) => + s.trim().toLowerCase() + ) + return list.includes('user.accountenabled') || list.includes('accountenabled') }) return { - currentLanguage + currentLanguage, + isLoginToggleHidden } }, computed: { 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 42b3ae83ba..5859233b13 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 @@ -63,7 +63,7 @@ />
-
+
{ return capabilityStore.graphUsersReadOnlyAttributes.includes(key) } + const isLoginToggleHidden = computed(() => { + const list = (capabilityStore.graphUsersReadOnlyAttributes ?? []).map((s: string) => + s.trim().toLowerCase() + ) + return list.includes('user.accountenabled') || list.includes('accountenabled') + }) const onUpdateUserAppRoleAssignments = (user: User, editUser: User) => { const client = clientService.graphAuthenticated @@ -298,6 +304,7 @@ export default defineComponent({ maxQuota: capabilityRefs.spacesMaxQuota, isInputFieldReadOnly, isLoginInputDisabled, + isLoginToggleHidden, editUser, formData, groupOptions, 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 b2495d7c4c..3b04abb697 100644 --- a/packages/web-app-admin-settings/src/components/Users/UsersList.vue +++ b/packages/web-app-admin-settings/src/components/Users/UsersList.vue @@ -148,6 +148,7 @@ import { findIndex } from 'lodash-es' import Mark from 'mark.js' import { OcTable } from '@opencloud-eu/design-system/components' import { FieldType } from '@opencloud-eu/design-system/helpers' +import { useAdminUsersFlags } from '../../composables/useAdminUsersFlags' export default defineComponent({ name: 'UsersList', @@ -175,6 +176,7 @@ export default defineComponent({ const lastSelectedUserIndex = ref(0) const lastSelectedUserId = ref(null) + const { isLoginToggleHidden } = useAdminUsersFlags() const userSettingsStore = useUserSettingsStore() const { users, selectedUsers } = storeToRefs(userSettingsStore) @@ -337,7 +339,7 @@ export default defineComponent({ ) const fields = computed(() => { - return [ + const cols: FieldType[] = [ { name: 'select', title: '', @@ -372,21 +374,27 @@ export default defineComponent({ title: $gettext('Role'), type: 'slot', sortable: true - }, - { + } + ] + + if (!isLoginToggleHidden.value) { + cols.push({ name: 'accountEnabled', title: $gettext('Login'), type: 'slot', sortable: true - }, - { - name: 'actions', - title: $gettext('Actions'), - sortable: false, - type: 'slot', - alignH: 'right' - } - ] + }) + } + + cols.push({ + name: 'actions', + title: $gettext('Actions'), + sortable: false, + type: 'slot', + alignH: 'right' + }) + + return cols }) const markInstance = ref(null) diff --git a/packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts b/packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts new file mode 100644 index 0000000000..0cff24bdef --- /dev/null +++ b/packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts @@ -0,0 +1,26 @@ +import { computed, type ComputedRef } from 'vue' +import { storeToRefs } from 'pinia' +import { useCapabilityStore } from '@opencloud-eu/web-pkg' + +type Caps = { + graph?: { users?: { read_only_attributes?: string[] } } +} + +export function useAdminUsersFlags(): { + isLoginToggleHidden: ComputedRef +} { + const capabilityStore = useCapabilityStore() + const { capabilities } = storeToRefs(capabilityStore) + + const readOnlyAttrs = computed( + () => (capabilities.value as Caps)?.graph?.users?.read_only_attributes ?? [] + ) + + const isLoginToggleHidden = computed(() => { + const lc = readOnlyAttrs.value.map((s) => s.trim().toLowerCase()) + return lc.includes('accountenabled') || lc.includes('user.accountenabled') + }) + console.log('isLoginToggleHidden', isLoginToggleHidden.value, readOnlyAttrs.value) + + return { isLoginToggleHidden } +} diff --git a/packages/web-app-admin-settings/src/views/Users.vue b/packages/web-app-admin-settings/src/views/Users.vue index 758b9598ba..85be87c3f0 100644 --- a/packages/web-app-admin-settings/src/views/Users.vue +++ b/packages/web-app-admin-settings/src/views/Users.vue @@ -164,6 +164,7 @@ import { useGettext } from 'vue3-gettext' import { format } from 'util' import { omit } from 'lodash-es' import { storeToRefs } from 'pinia' +import { useAdminUsersFlags } from '../composables/useAdminUsersFlags' import { useUserSettingsStore } from '../composables/stores/userSettings' import { call } from '@opencloud-eu/web-client' @@ -195,6 +196,7 @@ export default defineComponent({ const { actions: createUserActions } = useUserActionsCreateUser() const createUserAction = computed(() => unref(createUserActions)[0]) + const { isLoginToggleHidden } = useAdminUsersFlags() const { actions: deleteActions } = useUserActionsDelete() const { actions: removeFromGroupsActions } = useUserActionsRemoveFromGroups({ @@ -388,13 +390,15 @@ export default defineComponent({ }) const batchActions = computed(() => { - return [ + const list = [ ...unref(deleteActions), ...unref(editQuotaActions), ...unref(addToGroupsActions), ...unref(removeFromGroupsActions), - ...unref(editLoginActions) - ].filter((item) => item.isVisible({ resources: unref(selectedUsers) })) + ...(!isLoginToggleHidden.value ? unref(editLoginActions) : []) + ] + + return list.filter((item) => item.isVisible({ resources: unref(selectedUsers) })) }) const updateSpaceQuota = ({ spaceId, quota }: { spaceId: string; quota: Quota }) => { From 9c202627fc2ae4e25817c189f8fd03429cc90a4a Mon Sep 17 00:00:00 2001 From: tammi-23 Date: Wed, 27 Aug 2025 21:34:24 +0200 Subject: [PATCH 2/4] feat: Changed capabilityname with new capability --- .../src/composables/useAdminUsersFlags.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts b/packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts index 0cff24bdef..6420324150 100644 --- a/packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts +++ b/packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts @@ -3,7 +3,7 @@ import { storeToRefs } from 'pinia' import { useCapabilityStore } from '@opencloud-eu/web-pkg' type Caps = { - graph?: { users?: { read_only_attributes?: string[] } } + graph?: { users?: { edit_login_allowed_disabled?: boolean } } } export function useAdminUsersFlags(): { @@ -12,15 +12,9 @@ export function useAdminUsersFlags(): { const capabilityStore = useCapabilityStore() const { capabilities } = storeToRefs(capabilityStore) - const readOnlyAttrs = computed( - () => (capabilities.value as Caps)?.graph?.users?.read_only_attributes ?? [] - ) - const isLoginToggleHidden = computed(() => { - const lc = readOnlyAttrs.value.map((s) => s.trim().toLowerCase()) - return lc.includes('accountenabled') || lc.includes('user.accountenabled') + return (capabilities.value as Caps)?.graph?.users?.edit_login_allowed_disabled === true }) - console.log('isLoginToggleHidden', isLoginToggleHidden.value, readOnlyAttrs.value) return { isLoginToggleHidden } } From dcd51aa6a69b073dd5948200a38625a54069c725 Mon Sep 17 00:00:00 2001 From: tammi-23 Date: Fri, 29 Aug 2025 10:02:44 +0200 Subject: [PATCH 3/4] feat: implemented new capability inside web --- .../components/Users/SideBar/DetailsPanel.vue | 12 ++++------- .../components/Users/SideBar/EditPanel.vue | 12 +++-------- .../src/components/Users/UsersList.vue | 4 +++- .../src/composables/useAdminUsersFlags.ts | 20 ------------------- .../src/views/Users.vue | 12 +++++------ packages/web-client/src/ocs/capabilities.ts | 1 + .../composables/piniaStores/capabilities.ts | 7 ++++++- 7 files changed, 22 insertions(+), 46 deletions(-) delete mode 100644 packages/web-app-admin-settings/src/composables/useAdminUsersFlags.ts 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 cb751d1650..aea5a50a5a 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 @@ -39,7 +39,7 @@
-