@7365admin1/layer-common 4.0.3-staging.229 → 4.0.3-staging.230

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -727,15 +727,15 @@ const props = defineProps({
727
727
  },
728
728
  canAddServiceProvider: {
729
729
  type: Boolean,
730
- default: true,
730
+ default: undefined,
731
731
  },
732
732
  canInviteServiceProvider: {
733
733
  type: Boolean,
734
- default: true,
734
+ default: undefined,
735
735
  },
736
736
  canViewServiceProviders: {
737
737
  type: Boolean,
738
- default: true,
738
+ default: undefined,
739
739
  },
740
740
  showAddButton: {
741
741
  type: Boolean,
@@ -747,6 +747,25 @@ const props = defineProps({
747
747
  },
748
748
  });
749
749
 
750
+ // No app binds these three -- there was no permission catalogue key to bind
751
+ // them to, so they defaulted to `true` and every action was open to any
752
+ // signed-in user in every consumer. `useServiceProviderPermission` computes
753
+ // the real gate now; an app that DOES pass the prop still wins over it.
754
+ const {
755
+ canAddServiceProvider: derivedCanAddServiceProvider,
756
+ canInviteServiceProvider: derivedCanInviteServiceProvider,
757
+ canViewServiceProviders: derivedCanViewServiceProviders,
758
+ } = useServiceProviderPermission();
759
+ const canAddServiceProvider = computed(
760
+ () => props.canAddServiceProvider ?? derivedCanAddServiceProvider.value
761
+ );
762
+ const canInviteServiceProvider = computed(
763
+ () => props.canInviteServiceProvider ?? derivedCanInviteServiceProvider.value
764
+ );
765
+ const canViewServiceProviders = computed(
766
+ () => props.canViewServiceProviders ?? derivedCanViewServiceProviders.value
767
+ );
768
+
750
769
  // Only property-management contributes a service-provider-mgmt/billing page;
751
770
  // null in every other consumer, which hides the button instead of throwing.
752
771
  const billingRouteName = pickRouteName(
@@ -221,6 +221,21 @@ export function useCommonPermissions() {
221
221
  },
222
222
  }
223
223
 
224
+ const serviceProviderPermissions: Record<string, TPermission> = {
225
+ "add-service-provider": {
226
+ check: true,
227
+ description: "Allows the user to add a new service provider.",
228
+ },
229
+ "invite-service-provider": {
230
+ check: true,
231
+ description: "Allows the user to invite a service provider to the organization.",
232
+ },
233
+ "see-all-service-providers": {
234
+ check: true,
235
+ description: "Allows the user to view the list of all service providers.",
236
+ },
237
+ }
238
+
224
239
  const siteSettingsPermissions: Record<string, TPermission> = {
225
240
  "manage-site-information": {
226
241
  check: true,
@@ -291,6 +306,7 @@ export function useCommonPermissions() {
291
306
  buildingManagementPermissions,
292
307
  buildingUnitManagementPermissions,
293
308
  bulletinBoardPermissions,
309
+ serviceProviderPermissions,
294
310
  siteSettingsPermissions,
295
311
 
296
312
  };
@@ -0,0 +1,33 @@
1
+ import { useCommonPermissions } from "./useCommonPermission";
2
+
3
+ export function useServiceProviderPermission() {
4
+ const { hasPermission } = usePermission();
5
+ const { serviceProviderPermissions } = useCommonPermissions();
6
+ const permissions: TPermissions = { "service-provider": serviceProviderPermissions };
7
+
8
+ const { userAppRole } = useLocalSetup();
9
+
10
+ const canAddServiceProvider = computed(() => {
11
+ if (!userAppRole.value) return false;
12
+ if (userAppRole.value.permissions.includes("*")) return true;
13
+ return hasPermission(userAppRole.value, permissions, "service-provider", "add-service-provider");
14
+ });
15
+
16
+ const canInviteServiceProvider = computed(() => {
17
+ if (!userAppRole.value) return false;
18
+ if (userAppRole.value.permissions.includes("*")) return true;
19
+ return hasPermission(userAppRole.value, permissions, "service-provider", "invite-service-provider");
20
+ });
21
+
22
+ const canViewServiceProviders = computed(() => {
23
+ if (!userAppRole.value) return false;
24
+ if (userAppRole.value.permissions.includes("*")) return true;
25
+ return hasPermission(userAppRole.value, permissions, "service-provider", "see-all-service-providers");
26
+ });
27
+
28
+ return {
29
+ canAddServiceProvider,
30
+ canInviteServiceProvider,
31
+ canViewServiceProviders,
32
+ };
33
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@7365admin1/layer-common",
3
3
  "license": "MIT",
4
4
  "type": "module",
5
- "version": "4.0.3-staging.229",
5
+ "version": "4.0.3-staging.230",
6
6
  "author": "7365admin1",
7
7
  "main": "./nuxt.config.ts",
8
8
  "//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",