|
|
@@ -1,11 +1,11 @@
|
|
|
-import {$accessProfile} from "@/services/profile/accessProfile"
|
|
|
-import {$organizationProfile} from "@/services/profile/organizationProfile"
|
|
|
-import {$roleUtils} from "~/services/rights/roleUtils";
|
|
|
-import {AbilitiesType, AnyJson, AnyStore} from "~/types/interfaces";
|
|
|
-import {Ability} from "@casl/ability";
|
|
|
-import * as _ from "lodash";
|
|
|
-import Serializer from "~/services/serializer/serializer";
|
|
|
-import {DENORMALIZER_TYPE} from "~/types/enums";
|
|
|
+import { $accessProfile } from '@/services/profile/accessProfile'
|
|
|
+import { $organizationProfile } from '@/services/profile/organizationProfile'
|
|
|
+import { Ability } from '@casl/ability'
|
|
|
+import * as _ from 'lodash'
|
|
|
+import { $roleUtils } from '~/services/rights/roleUtils'
|
|
|
+import { AbilitiesType, AnyJson, AnyStore } from '~/types/interfaces'
|
|
|
+import Serializer from '~/services/serializer/serializer'
|
|
|
+import { DENORMALIZER_TYPE } from '~/types/enums'
|
|
|
|
|
|
/**
|
|
|
* @category Services/droits
|
|
|
@@ -20,7 +20,7 @@ class AbilitiesUtils {
|
|
|
/**
|
|
|
* @constructor
|
|
|
*/
|
|
|
- constructor(store: AnyStore, ability: Ability) {
|
|
|
+ constructor (store: AnyStore, ability: Ability) {
|
|
|
this.$store = store
|
|
|
this.$ability = ability
|
|
|
}
|
|
|
@@ -29,14 +29,14 @@ class AbilitiesUtils {
|
|
|
* retourne la factory des services
|
|
|
* @return {AnyJson} factory
|
|
|
*/
|
|
|
- getFactory(){
|
|
|
+ getFactory () {
|
|
|
return this.factory
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Initialise les services factories
|
|
|
*/
|
|
|
- initFactory() {
|
|
|
+ initFactory () {
|
|
|
this.factory = {
|
|
|
access: $accessProfile(this.$store, this.$ability),
|
|
|
organization: $organizationProfile(this.$store)
|
|
|
@@ -46,9 +46,9 @@ class AbilitiesUtils {
|
|
|
/**
|
|
|
* Set les abilities de l'utilisateur à chaque fois qu'on update son profile
|
|
|
*/
|
|
|
- setAbilities(){
|
|
|
- //Nécessaire pour que l'update des abilité soit correct après la phase SSR
|
|
|
- this.$ability.update(this.$store.state.profile.access.abilities);
|
|
|
+ setAbilities () {
|
|
|
+ // Nécessaire pour que l'update des abilité soit correct après la phase SSR
|
|
|
+ this.$ability.update(this.$store.state.profile.access.abilities)
|
|
|
|
|
|
/**
|
|
|
* Au moment où l'on effectue un SetProfile via le store Organization, il faut aller récupérer
|
|
|
@@ -58,15 +58,15 @@ class AbilitiesUtils {
|
|
|
after: (action, state) => {
|
|
|
switch (action.type) {
|
|
|
case 'profile/organization/setProfile':
|
|
|
- //On récupère les abilités
|
|
|
- const abilities = this.getAbilities();
|
|
|
+ // On récupère les abilités
|
|
|
+ const abilities = this.getAbilities()
|
|
|
|
|
|
- //On les store puis on update le service ability pour le mettre à jour.
|
|
|
+ // On les store puis on update le service ability pour le mettre à jour.
|
|
|
this.$store.commit('profile/access/setAbilities', abilities)
|
|
|
- this.$ability.update(abilities);
|
|
|
- //Unsubscribe pour éviter les memory leaks
|
|
|
+ this.$ability.update(abilities)
|
|
|
+ // Unsubscribe pour éviter les memory leaks
|
|
|
unsubscribe()
|
|
|
- break;
|
|
|
+ break
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
@@ -76,10 +76,10 @@ class AbilitiesUtils {
|
|
|
* Récupération de l'ensemble des abilities quelles soient par Roles ou par Config.
|
|
|
* @return {Array<AbilitiesType>}
|
|
|
*/
|
|
|
- getAbilities():Array<AbilitiesType> {
|
|
|
+ getAbilities ():Array<AbilitiesType> {
|
|
|
const abilitiesByRoles = this.getAbilitiesByRoles(this.$store.state.profile.access.roles)
|
|
|
- this.$ability.update(abilitiesByRoles);
|
|
|
- this.initFactory();
|
|
|
+ this.$ability.update(abilitiesByRoles)
|
|
|
+ this.initFactory()
|
|
|
return abilitiesByRoles.concat(this.getAbilitiesByConfig('./config/abilities/config.yaml'))
|
|
|
}
|
|
|
|
|
|
@@ -88,9 +88,9 @@ class AbilitiesUtils {
|
|
|
* @param {Array<string>} roles
|
|
|
* @return {Array<AbilitiesType>}
|
|
|
*/
|
|
|
- getAbilitiesByRoles(roles: Array<string>): Array<AbilitiesType> {
|
|
|
- roles = $roleUtils.transformUnderscoreToHyphenBeforeCompleteMigration(roles);
|
|
|
- return $roleUtils.transformRoleToAbilities(roles);
|
|
|
+ getAbilitiesByRoles (roles: Array<string>): Array<AbilitiesType> {
|
|
|
+ roles = $roleUtils.transformUnderscoreToHyphenBeforeCompleteMigration(roles)
|
|
|
+ return $roleUtils.transformRoleToAbilities(roles)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -100,18 +100,18 @@ class AbilitiesUtils {
|
|
|
* @param {string} configPath
|
|
|
* @return {Array<AbilitiesType>}
|
|
|
*/
|
|
|
- getAbilitiesByConfig(configPath:string): Array<AbilitiesType> {
|
|
|
+ getAbilitiesByConfig (configPath:string): Array<AbilitiesType> {
|
|
|
let abilitiesByConfig: Array<AbilitiesType> = []
|
|
|
- try {
|
|
|
+ try {
|
|
|
const serializer = new Serializer()
|
|
|
- const doc = serializer.denormalize({path: configPath}, DENORMALIZER_TYPE.YAML);
|
|
|
- const abilitiesAvailable = doc['abilities']
|
|
|
+ const doc = serializer.denormalize({ path: configPath }, DENORMALIZER_TYPE.YAML)
|
|
|
+ const abilitiesAvailable = doc.abilities
|
|
|
const abilitiesFiltered = this.abilitiesAvailableFilter(abilitiesAvailable)
|
|
|
abilitiesByConfig = this.transformAbilitiesConfigToAbility(abilitiesFiltered)
|
|
|
} catch (e) {
|
|
|
throw new Error(e.message)
|
|
|
}
|
|
|
- return abilitiesByConfig;
|
|
|
+ return abilitiesByConfig
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -119,9 +119,9 @@ class AbilitiesUtils {
|
|
|
* @param {AnyJson} abilitiesAvailable
|
|
|
* @return {AnyJson}
|
|
|
*/
|
|
|
- abilitiesAvailableFilter(abilitiesAvailable:AnyJson):AnyJson{
|
|
|
- return _.pickBy(abilitiesAvailable, (ability:any) =>{
|
|
|
- const services = ability['services']
|
|
|
+ abilitiesAvailableFilter (abilitiesAvailable:AnyJson):AnyJson {
|
|
|
+ return _.pickBy(abilitiesAvailable, (ability:any) => {
|
|
|
+ const services = ability.services
|
|
|
return this.canHaveTheAbility(services)
|
|
|
})
|
|
|
}
|
|
|
@@ -131,16 +131,16 @@ class AbilitiesUtils {
|
|
|
* @param {AnyJson} abilitiesAvailable
|
|
|
* @return {Array<AbilitiesType>}
|
|
|
*/
|
|
|
- transformAbilitiesConfigToAbility(abilitiesAvailable:AnyJson):Array<AbilitiesType>{
|
|
|
- let abilitiesByConfig: Array<AbilitiesType> = []
|
|
|
+ transformAbilitiesConfigToAbility (abilitiesAvailable:AnyJson):Array<AbilitiesType> {
|
|
|
+ const abilitiesByConfig: Array<AbilitiesType> = []
|
|
|
_.each(abilitiesAvailable, (ability, subject) => {
|
|
|
- let myAbility: AbilitiesType = {
|
|
|
- action: ability['action'],
|
|
|
- subject: subject
|
|
|
+ const myAbility: AbilitiesType = {
|
|
|
+ action: ability.action,
|
|
|
+ subject
|
|
|
}
|
|
|
abilitiesByConfig.push(myAbility)
|
|
|
})
|
|
|
- return abilitiesByConfig;
|
|
|
+ return abilitiesByConfig
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -148,23 +148,23 @@ class AbilitiesUtils {
|
|
|
* @param {AnyJson} functionByservices
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
- canHaveTheAbility(functionByservices: AnyJson) {
|
|
|
- let hasAbility = true;
|
|
|
+ canHaveTheAbility (functionByservices: AnyJson) {
|
|
|
+ let hasAbility = true
|
|
|
_.each(functionByservices, (functions, service) => {
|
|
|
if (hasAbility) {
|
|
|
const nbFunctions = functions.length
|
|
|
let cmpt = 0
|
|
|
while (hasAbility && nbFunctions > cmpt) {
|
|
|
- const f = functions[cmpt]['function'];
|
|
|
- const parameters = functions[cmpt]['parameters'] ?? null;
|
|
|
- const result = functions[cmpt]['result'] ?? null;
|
|
|
+ const f = functions[cmpt].function
|
|
|
+ const parameters = functions[cmpt].parameters ?? null
|
|
|
+ const result = functions[cmpt].result ?? null
|
|
|
hasAbility = result !== null ? this.factory[service].handler()[f](parameters) == result : this.factory[service].handler()[f](parameters)
|
|
|
cmpt++
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
- return hasAbility;
|
|
|
+ return hasAbility
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-export const $abilitiesUtils = (store: AnyStore, ability:Ability) => new AbilitiesUtils(store, ability);
|
|
|
+export const $abilitiesUtils = (store: AnyStore, ability:Ability) => new AbilitiesUtils(store, ability)
|