|
|
@@ -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))
|
|
|
}
|
|
|
}
|