浏览代码

move content of AbilityBuilder.setupAbilities into the ablity plugin

Olivier Massot 2 年之前
父节点
当前提交
1c2d381194
共有 4 个文件被更改,包括 31 次插入38 次删除
  1. 26 1
      plugins/ability.ts
  2. 3 32
      services/rights/abilityBuilder.ts
  3. 0 2
      stores/accessProfile.ts
  4. 2 3
      stores/organizationProfile.ts

+ 26 - 1
plugins/ability.ts

@@ -10,7 +10,32 @@ export default defineNuxtPlugin(() => {
     const accessProfile = useAccessProfileStore()
     const organizationProfile = useOrganizationProfileStore()
 
+    // Initialisation, nécessaire pour que l'update des habilités soit correcte après la phase SSR
+    ability.update(accessProfile.abilities)
+
     const abilityUtils = new AbilityBuilder(ability, accessProfile, organizationProfile)
 
-    abilityUtils.setupAbilities()
+    // Au moment où l'on effectue une action organizationProfileStore.setProfile, il faut aller récupérer
+    // les différentes habilités que l'utilisateur peut effectuer. (Tout cela se passe en SSR)
+    // TODO: voir si on peut se passer du listener
+    // TODO: clarifier l'ordre des opérations de maj des profils et des droits
+    const unsubscribe = organizationProfile.$onAction(({
+                                                                name, // name of the action
+                                                                store, // store instance, same as `someStore`
+                                                                args, // array of parameters passed to the action
+                                                                after, // hook after the action returns or resolves
+                                                                onError, // hook if the action throws or rejects
+                                                            }: any) => {
+        after((result: any)=>{
+            if (name === 'setProfile'){
+                // On construit les habilités et on les enregistre dans le store
+                // noinspection UnnecessaryLocalVariableJS
+                const abilities = abilityUtils.buildAbilities();
+                accessProfile.abilities = abilities
+
+                // Unsubscribe pour éviter les memory leaks
+                unsubscribe()
+            }
+        })
+    })
 })

+ 3 - 32
services/rights/abilityBuilder.ts

@@ -37,44 +37,13 @@ class AbilityBuilder {
         this.organizationProfile = organizationProfile
     }
 
-    /**
-     * Construit les habilités de l'utilisateur selon son profil et met à jour MongoAbility en fonction
-     */
-    setupAbilities() {
-        // Nécessaire pour que l'update des habilités soit correcte après la phase SSR
-        this.ability.update(this.accessProfile.abilities)
-
-        // Au moment où l'on effectue une action organizationProfileStore.setProfile, il faut aller récupérer
-        // les différentes habilités que l'utilisateur peut effectuer. (Tout cela se passe en SSR)
-        const unsubscribe = this.organizationProfile.$onAction(({
-                                                                    name, // name of the action
-                                                                    store, // store instance, same as `someStore`
-                                                                    args, // array of parameters passed to the action
-                                                                    after, // hook after the action returns or resolves
-                                                                    onError, // hook if the action throws or rejects
-                                                                }: any) => {
-            after((result: any)=>{
-                if (name === 'setProfile'){
-                    //On construit les habilités
-                    this.buildAbilities();
-
-                    //On les store puis on update le service ability pour le mettre à jour.
-                    this.accessProfile.abilities = this.abilities
-
-                    // Unsubscribe pour éviter les memory leaks
-                    unsubscribe()
-                }
-            })
-        })
-    }
-
     /**
      * Construit et renvoie l'ensemble des habilités de l'utilisateur, qu'elles soient issues de ses roles
      * ou de la configuration
      *
      * @return {Array<AbilitiesType>}
      */
-    buildAbilities() {
+    buildAbilities(): Array<AbilitiesType> {
         // Build from roles
         this.abilities = this.buildAbilitiesFromRoles()
         this.ability.update(this.abilities)
@@ -82,6 +51,8 @@ class AbilityBuilder {
         // Build from config
         this.abilities = this.abilities.concat(this.buildAbilitiesFromConfig())
         this.ability.update(this.abilities)
+
+        return this.abilities
     }
 
     /**

+ 0 - 2
stores/accessProfile.ts

@@ -10,8 +10,6 @@ import {
 import {computed, ref, Ref} from "@vue/reactivity";
 import {useOrganizationProfileStore} from "~/stores/organizationProfile";
 import RoleUtils from "~/services/rights/roleUtils";
-import AbilityBuilder from "~/services/rights/abilityBuilder";
-import {ability} from "~/plugins/ability";
 
 export const useAccessProfileStore = defineStore('accessProfile', () => {
 

+ 2 - 3
stores/organizationProfile.ts

@@ -1,7 +1,6 @@
 import { BaseOrganizationProfile } from '~/types/interfaces'
 import { defineStore } from "pinia";
 import {computed, Ref} from "@vue/reactivity";
-import {useEach} from "#imports";
 
 export const useOrganizationProfileStore = defineStore('organizationProfile', () => {
 
@@ -23,7 +22,7 @@ export const useOrganizationProfileStore = defineStore('organizationProfile', ()
 
   // Getters
   /**
-   * L'organization fait-elle partie du réseau CMF?
+   * L'organization fait-elle partie du réseau CMF ?
    *
    * @return {boolean}
    */
@@ -34,7 +33,7 @@ export const useOrganizationProfileStore = defineStore('organizationProfile', ()
   })
 
   /**
-   * L'organization fait-elle partie du réseau FFEC?
+   * L'organization fait-elle partie du réseau FFEC ?
    *
    * @return {boolean}
    */