소스 검색

fix abilityBuilder types

Olivier Massot 1 년 전
부모
커밋
6a6581aab1
1개의 변경된 파일41개의 추가작업 그리고 20개의 파일을 삭제
  1. 41 20
      services/rights/abilityBuilder.ts

+ 41 - 20
services/rights/abilityBuilder.ts

@@ -120,17 +120,24 @@ class AbilityBuilder {
    *
    * TODO: voir pourquoi on a besoin d'accepter un param null pour le hasProfile?
    */
-  handlerMap: Record<string, (parameters: Array<AbilitiesType>) => boolean> = {
-    accessHasAllRoleAbilities: (parameters: Array<AbilitiesType>) =>
-      this.hasAllRoleAbilities(parameters),
-    accessHasAnyRoleAbility: (parameters: Array<AbilitiesType>) =>
-      this.hasAnyRoleAbility(parameters),
-    accessHasAnyProfile: (parameters: Array<AbilitiesType>) =>
+  handlerMap: Record<
+    string,
+    (parameters: Array<ConditionParameters | string>) => boolean
+  > = {
+    accessHasAllRoleAbilities: (
+      parameters: Array<ConditionParameters | string>,
+    ) => this.hasAllRoleAbilities(parameters),
+    accessHasAnyRoleAbility: (
+      parameters: Array<ConditionParameters | string>,
+    ) => this.hasAnyRoleAbility(parameters),
+    accessHasAnyProfile: (parameters: Array<ConditionParameters | string>) =>
       parameters === null || this.hasAnyProfile(parameters),
-    organizationHasAllModules: (parameters: Array<AbilitiesType>) =>
-      this.hasAllModules(parameters),
-    organizationHasAnyModule: (parameters: Array<AbilitiesType>) =>
-      this.hasAnyModule(parameters),
+    organizationHasAllModules: (
+      parameters: Array<ConditionParameters | string>,
+    ) => this.hasAllModules(parameters),
+    organizationHasAnyModule: (
+      parameters: Array<ConditionParameters | string>,
+    ) => this.hasAnyModule(parameters),
     accessIsAdminAccount: (_) => this.accessProfile.isAdminAccount,
     organizationIsSchool: (_) => this.organizationProfile.isSchool,
     organizationIsArtist: (_) => this.organizationProfile.isArtist,
@@ -173,7 +180,13 @@ class AbilityBuilder {
    * @return {boolean}
    * @param ability
    */
-  hasRoleAbility(ability: AbilitiesType): boolean {
+  hasRoleAbility(ability: ConditionParameters | string): boolean {
+    if (!Object.prototype.hasOwnProperty.call(ability, 'action')) {
+      throw new Error(
+        'hasRoleAbility except a ConditionParameters object, not a string',
+      )
+    }
+    ability = ability as ConditionParameters
     return this.ability.can(ability.action, ability.subject)
   }
 
@@ -183,7 +196,7 @@ class AbilityBuilder {
    * @param {Array<AbilitiesType>} abilities Habilités à tester
    * @return {boolean}
    */
-  hasAllRoleAbilities(abilities: Array<AbilitiesType>): boolean {
+  hasAllRoleAbilities(abilities: Array<ConditionParameters | string>): boolean {
     return abilities.every((ability) => this.hasRoleAbility(ability))
   }
 
@@ -193,7 +206,7 @@ class AbilityBuilder {
    * @param {Array<AbilitiesType>} abilities Habilités à tester
    * @return {boolean}
    */
-  hasAnyRoleAbility(abilities: Array<AbilitiesType>): boolean {
+  hasAnyRoleAbility(abilities: Array<ConditionParameters | string>): boolean {
     return abilities.some((ability) => this.hasRoleAbility(ability))
   }
 
@@ -203,7 +216,11 @@ class AbilityBuilder {
    * @param {string} profile Profil à tester
    * @return {boolean}
    */
-  hasProfile(profile: string): boolean {
+  hasProfile(profile: ConditionParameters | string): boolean {
+    if (Object.prototype.hasOwnProperty.call(profile, 'subject')) {
+      profile = (profile as ConditionParameters).subject
+    }
+
     return (
       {
         admin: this.accessProfile.isAdmin,
@@ -217,7 +234,7 @@ class AbilityBuilder {
         other: this.accessProfile.isOther,
         guardian: this.accessProfile.isGuardian,
         payor: this.accessProfile.isPayer,
-      }[profile] ?? false
+      }[profile as string] ?? false
     )
   }
 
@@ -227,7 +244,7 @@ class AbilityBuilder {
    * @param {Array<string>} profiles Profils à tester
    * @return {boolean}
    */
-  hasAnyProfile(profiles: Array<string>): boolean {
+  hasAnyProfile(profiles: Array<ConditionParameters | string>): boolean {
     return profiles.some((p) => this.hasProfile(p))
   }
 
@@ -237,7 +254,7 @@ class AbilityBuilder {
    * @param {Array<string>} profiles Profils à tester
    * @return {boolean}
    */
-  hasAllProfiles(profiles: Array<string>): boolean {
+  hasAllProfiles(profiles: Array<ConditionParameters | string>): boolean {
     return profiles.every((p) => this.hasProfile(p))
   }
 
@@ -277,7 +294,11 @@ class AbilityBuilder {
    * @return {boolean}
    * @param module
    */
-  hasModule(module: string): boolean {
+  hasModule(module: ConditionParameters | string): boolean {
+    if (Object.prototype.hasOwnProperty.call(module, 'subject')) {
+      module = (module as ConditionParameters).subject
+    }
+
     return this.organizationProfile.hasModule(module)
   }
 
@@ -287,7 +308,7 @@ class AbilityBuilder {
    * @param modules
    * @return {boolean}
    */
-  hasAnyModule(modules: Array<string>): boolean {
+  hasAnyModule(modules: Array<ConditionParameters | string>): boolean {
     return modules.some((r) => this.hasModule(r))
   }
 
@@ -297,7 +318,7 @@ class AbilityBuilder {
    * @param modules
    * @return {boolean}
    */
-  hasAllModules(modules: Array<string>): boolean {
+  hasAllModules(modules: Array<ConditionParameters | string>): boolean {
     return modules.every((r) => this.hasModule(r))
   }
 }