| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { Ability } from '@casl/ability'
- import { AbilitiesType, accessState, AccessStore, AnyJson } from '~/types/interfaces'
- /**
- * @category Services/profiles
- * @class AccessProfile
- * Classe répondant aux différentes questions que l'on peut se poser sur l'access connecté
- */
- class AccessProfile {
- private accessProfile: accessState
- private $ability:Ability = {} as Ability
- /**
- * @constructor
- * @param {AccessStore} store State Access du Store contenant les informations de l'utilisateur
- * @param {Ability} ability Plugin $ability
- */
- constructor (store:AccessStore, ability:Ability) {
- this.accessProfile = store.state.profile.access
- this.$ability = ability
- }
- /**
- * Est ce que l'utilisateur possède le role.
- * @param {Array<string>} roles roles à tester
- * @return {boolean}
- */
- hasRole (roles:Array<string>): boolean {
- if (roles === null) { return true }
- let hasRole = false
- roles.map((r) => {
- if (this.accessProfile.roles.includes(r)) { hasRole = true }
- })
- return hasRole
- }
- /**
- * Est-ce que l'utilisateur possède l'abilité
- * @param {Array<AbilitiesType>} ability abilité à tester
- * @return {boolean}
- */
- hasAbility (ability:Array<AbilitiesType>): boolean {
- if (ability === null) { return true }
- let hasAbility = false
- ability.map((ability) => {
- if (this.$ability.can(ability.action, ability.subject)) { hasAbility = true }
- })
- return hasAbility
- }
- /**
- * Factory
- * @return {AnyJson} retourne les fonction rendues publiques
- */
- handler ():AnyJson {
- return {
- hasRole: this.hasRole.bind(this),
- hasAbility: this.hasAbility.bind(this)
- }
- }
- }
- export const $accessProfile = (store:AccessStore, ability:Ability) => new AccessProfile(store, ability)
|