瀏覽代碼

replace calls to lodash useXxx in services by _. and fix abilityBuilder

Olivier Massot 2 年之前
父節點
當前提交
738df07b6a

+ 13 - 11
services/data/entityManager.ts

@@ -1,14 +1,15 @@
-import ApiRequestService from "./apiRequestService";
-import {Repository, useRepo} from "pinia-orm";
-import UrlUtils from "~/services/utils/urlUtils";
-import HydraDenormalizer from "./normalizer/hydraDenormalizer";
-import ApiModel from "~/models/ApiModel";
-import ApiResource from "~/models/ApiResource";
-import {MyProfile} from "~/models/Access/MyProfile";
-import {v4 as uuid4} from 'uuid';
-import {AssociativeArray, Collection} from "~/types/data.d";
+import ApiRequestService from "./apiRequestService"
+import {Repository, useRepo} from "pinia-orm"
+import UrlUtils from "~/services/utils/urlUtils"
+import HydraDenormalizer from "./normalizer/hydraDenormalizer"
+import ApiModel from "~/models/ApiModel"
+import ApiResource from "~/models/ApiResource"
+import {MyProfile} from "~/models/Access/MyProfile"
+import {v4 as uuid4} from 'uuid'
+import {AssociativeArray, Collection} from "~/types/data.d"
 import models from "~/models/models";
-import {useAccessProfileStore} from "~/stores/accessProfile";
+import {useAccessProfileStore} from "~/stores/accessProfile"
+import _ from "lodash"
 
 /**
  * Entity manager: make operations on the models defined with the Pinia-Orm library
@@ -32,6 +33,7 @@ class EntityManager {
      * @param model
      */
     public getRepository(model: typeof ApiResource): Repository<ApiResource> {
+        // TODO: voir si possible de passer par une injection de dépendance plutôt que par un use
         return useRepo(model)
     }
 
@@ -334,7 +336,7 @@ class EntityManager {
         const repository = this.getRepository(model)
 
         // Clone and prefix id
-        const clone = useCloneDeep(entity)
+        const clone = _.cloneDeep(entity)
         clone.id = this.CLONE_PREFIX + clone.id
 
         repository.save(clone)

+ 2 - 0
services/encoder/yamlEncoder.ts

@@ -6,6 +6,8 @@ import {Encoder} from "~/types/interfaces";
  * Encodage / décodage de données au format Yaml
  */
 class YamlEncoder implements Encoder {
+  //   TODO: voir si toujours utile de le garder? ou peut-être en faire un YamlUtils et ajouter la fonction 'readFile'
+  //       utilisée dans le abilityBuilder
   /**
    * Convertit l'objet suivant au format Yaml
    *

+ 1 - 0
services/menuBuilder/accessMenuBuilder.ts

@@ -16,6 +16,7 @@ export default class AccessMenuBuilder extends AbstractMenuBuilder {
     const children: MenuItems = []
 
     if (this.ability.can('display', 'accesses_page')) {
+      // TODO: voir si possible de passer par une injection de dépendance plutôt que par un use
       const organizationProfile = useOrganizationProfileStore()
       const to = organizationProfile.isSchool ? '/students/list/' : '/adherent/list/'
       children.push(this.createItem('person', {name: 'fas fa-user'}, to, MENU_LINK_TYPE.V1))

+ 2 - 1
services/menuBuilder/myAccessesMenuBuilder.ts

@@ -1,6 +1,7 @@
 import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
+import _ from "lodash"
 
 /**
  * Menu Mon Profil
@@ -14,7 +15,7 @@ export default class MyAccessesMenuBuilder extends AbstractMenuBuilder {
   build(): MenuGroup | null {
     const children: MenuItems = []
 
-    useEach(this.accessProfile.multiAccesses, (access) => {
+    _.each(this.accessProfile.multiAccesses, (access) => {
       children.push(this.createItem(access.name as string, undefined, '/switch/' + access.id, MENU_LINK_TYPE.V1))
     })
 

+ 2 - 1
services/menuBuilder/myFamilyMenuBuilder.ts

@@ -1,6 +1,7 @@
 import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
+import _ from "lodash"
 
 /**
  * Menu Famille
@@ -15,7 +16,7 @@ export default class MyFamilyMenuBuilder extends AbstractMenuBuilder {
     const children: MenuItems = []
 
     // Si Access des membres de la familles (enfants)
-    useEach(this.accessProfile.familyAccesses, (access) => {
+    _.each(this.accessProfile.familyAccesses, (access) => {
       const url = `/switch_user/${this.organizationProfile.id}/${this.accessProfile.id}/${access.id}`
       const icon = {
         avatarId: access.avatarId,

+ 2 - 1
services/menuBuilder/websiteListMenuBuilder.ts

@@ -1,6 +1,7 @@
 import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
 import {MenuGroup, MenuItems} from "~/types/layout";
 import {MENU_LINK_TYPE} from "~/types/enum/layout";
+import _ from "lodash"
 
 /**
  * Menu : Liste des sites internet de la structure et de ses structures parentes
@@ -17,7 +18,7 @@ export default class WebsiteListMenuBuilder extends AbstractMenuBuilder {
     const url = this.organizationProfile.website + '/typo3'
     children.push(this.createItem(this.organizationProfile.name as string, undefined, url, MENU_LINK_TYPE.V1))
 
-    useEach(this.organizationProfile.parents, (parent:any) => {
+    _.each(this.organizationProfile.parents, (parent:any) => {
       if(parent.id != this.runtimeConfig.OPENTALENT_MANAGER_ID){
         children.push(this.createItem(parent.name, undefined, parent.website, MENU_LINK_TYPE.EXTERNAL))
       }

+ 4 - 7
services/rights/abilityBuilder.ts

@@ -2,8 +2,8 @@ import RoleUtils from '~/services/rights/roleUtils'
 import {AbilitiesType} from '~/types/interfaces'
 import {MongoAbility} from "@casl/ability/dist/types/Ability";
 import {ABILITIES} from "~/types/enum/enums";
-import YamlEncoder from "~/services/encoder/yamlEncoder";
 import {read} from "yaml-import";
+import _ from "lodash"
 
 interface Condition {
     function: string
@@ -97,14 +97,10 @@ class AbilityBuilder {
     buildAbilitiesFromConfig() {
         const abilitiesByConfig: Array<AbilitiesType> = []
 
-        const doc = YamlEncoder.decode(read(this.configFile))
-        if (doc === null) {
-            throw new Error('Error while reading abilities config file')
-        }
-
+        const doc = read(this.configFile)
         const fromConfig = doc.abilities
 
-        useEach(fromConfig, (ability: { action: ABILITIES, conditions: Array<Condition> }, subject: string) => {
+        _.each(fromConfig, (ability: { action: ABILITIES, conditions: Array<Condition> }, subject: string) => {
             let { action, conditions } = ability
 
             if (!Array.isArray(conditions)) {
@@ -131,6 +127,7 @@ class AbilityBuilder {
         return conditions.every((condition) => this.execAndValidateCondition(condition, subject))
     }
 
+    // noinspection JSUnusedGlobalSymbols
     /**
      * Correspondances entre les noms des fonctions définies dans les conditions des fichiers de configuration et
      * les méthodes correspondantes

+ 3 - 2
services/rights/roleUtils.ts

@@ -1,5 +1,6 @@
 import { AbilitiesType } from '~/types/interfaces'
-import {AnyJson} from "~/types/data";
+import {AnyJson} from "~/types/data"
+import _ from "lodash"
 
 // TODO: peut-être passer ces constantes dans la config?
 const rolesByFunction: Array<string> = [
@@ -127,7 +128,7 @@ class RoleUtils {
     const regex = /(ROLE_)([A-Z-]*)([_A-Z]*)/i
     let match
 
-    useEach(roles, (role) => {
+    _.each(roles, (role) => {
       if ((match = regex.exec(role)) !== null) {
         const subject = match[2]
         const actionName = match[3] ?? ''