| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import {AbilitiesType, accessState, AccessStore, AnyJson} from "~/types/types";
- import {Ability} from "@casl/ability";
- /**
- * @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
- * @returns {boolean}
- */
- hasRole(roles:Array<string>): boolean{
- if (null === roles)
- return true;
- let hasRole = false;
- roles.map((r) => {
- if (this.accessProfile.roles.indexOf(r) > -1)
- hasRole = true;
- });
- return hasRole;
- }
- /**
- * Est-ce que l'utilisateur possède l'abilité
- * @param {Array<AbilitiesType>} ability abilité à tester
- * @returns {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
- * @returns {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);
|