diff --git a/apps/meteor/app/authorization/client/hasPermission.ts b/apps/meteor/app/authorization/client/hasPermission.ts index 9b87ce363a43f..165f17a273f00 100644 --- a/apps/meteor/app/authorization/client/hasPermission.ts +++ b/apps/meteor/app/authorization/client/hasPermission.ts @@ -26,9 +26,7 @@ const createPermissionValidator = } } - const permission = Models.Permissions.findOne(permissionId, { - fields: { roles: 1 }, - }); + const permission = Models.Permissions.state.get(permissionId); const roles = permission?.roles ?? []; return roles.some((roleId) => { diff --git a/apps/meteor/app/models/client/models/Permissions.ts b/apps/meteor/app/models/client/models/Permissions.ts index 18898d07e0b9f..387c9c9613847 100644 --- a/apps/meteor/app/models/client/models/Permissions.ts +++ b/apps/meteor/app/models/client/models/Permissions.ts @@ -1,10 +1,18 @@ import type { IPermission } from '@rocket.chat/core-typings'; +import type { StoreApi, UseBoundStore } from 'zustand'; import { PrivateCachedCollection } from '../../../../client/lib/cachedCollections'; +import type { IDocumentMapStore } from '../../../../client/lib/cachedCollections/DocumentMapStore'; + +type PermissionsStore = { + use: UseBoundStore>>; + readonly state: IDocumentMapStore; +}; export const AuthzCachedCollection = new PrivateCachedCollection({ name: 'permissions', eventType: 'notify-logged', }); -export const Permissions = AuthzCachedCollection.collection; +// We are restricting the type of the collection, removing Minimongo methods to avoid further usage, until full conversion to zustand store +export const Permissions = AuthzCachedCollection.collection as PermissionsStore; diff --git a/apps/meteor/client/views/admin/permissions/hooks/useFilteredPermissions.ts b/apps/meteor/client/views/admin/permissions/hooks/useFilteredPermissions.ts index 9f0b86c29efe1..0e1506063599f 100644 --- a/apps/meteor/client/views/admin/permissions/hooks/useFilteredPermissions.ts +++ b/apps/meteor/client/views/admin/permissions/hooks/useFilteredPermissions.ts @@ -9,7 +9,7 @@ export const useFilteredPermissions = ({ filter }: { filter: string }) => { const { t } = useTranslation(); const mappedPermissionKeys = useMemo(() => { - const permissions = Permissions.find().fetch(); + const permissions = Array.from(Permissions.state.records.values()); return mapPermissionKeys({ t, permissions }); }, [t]);