roleUtils.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import {AbilitiesType, AnyJson} from "~/types/types";
  2. import * as _ from "lodash";
  3. const roles_by_function = [
  4. 'ROLE_SUPER_ADMIN',
  5. 'ROLE_ADMIN',
  6. 'ROLE_ADMIN_CORE',
  7. 'ROLE_ADMINISTRATIF_MANAGER',
  8. 'ROLE_ADMINISTRATIF_MANAGER_CORE',
  9. 'ROLE_PEDAGOGICS_MANAGER',
  10. 'ROLE_PEDAGOGICS_MANAGER_CORE',
  11. 'ROLE_FINANCIAL_MANAGER',
  12. 'ROLE_FINANCIAL_MANAGER_CORE',
  13. 'ROLE_CA',
  14. 'ROLE_CA_CORE',
  15. 'ROLE_STUDENT',
  16. 'ROLE_STUDENT_CORE',
  17. 'ROLE_TEACHER',
  18. 'ROLE_TEACHER_CORE',
  19. 'ROLE_MEMBER',
  20. 'ROLE_MEMBER_CORE',
  21. 'ROLE_OTHER',
  22. 'ROLE_OTHER_CORE'
  23. ];
  24. const roles_to_change = [
  25. 'ROLE_GENERAL_CONFIG',
  26. 'ROLE_GENERAL_CONFIG_VIEW',
  27. 'ROLE_TAGG_ADVANCED',
  28. 'ROLE_TAGG_ADVANCED_VIEW',
  29. 'ROLE_PEDAGOGICS_ADMINISTRATION',
  30. 'ROLE_PEDAGOGICS_ADMINISTRATION_VIEW',
  31. 'ROLE_PEDAGOGICS_SEIZURE',
  32. 'ROLE_PEDAGOGICS_SEIZURE_VIEW',
  33. 'ROLE_BILLINGS_ADMINISTRATION',
  34. 'ROLE_BILLINGS_ADMINISTRATION_VIEW',
  35. 'ROLE_BILLINGS_SEIZURE',
  36. 'ROLE_BILLINGS_SEIZURE_VIEW',
  37. 'ROLE_ONLINEREGISTRATION_ADMINISTRATION',
  38. 'ROLE_ONLINEREGISTRATION_ADMINISTRATION_VIEW'
  39. ];
  40. const action_map: AnyJson = {
  41. '': 'manage',
  42. '_VIEW': 'read'
  43. }
  44. /**
  45. * @category Services/droits
  46. * @class RoleUtils
  47. * Classe permettant de mener des opérations sur les roles
  48. */
  49. class RoleUtils {
  50. /**
  51. * @constructor
  52. */
  53. constructor() {
  54. }
  55. /**
  56. * Test si une personne possède le role lui permettant d'acquérir la fonction
  57. * @param {string} function_name
  58. * @param {Array<string>} roles
  59. * @returns {boolean}
  60. */
  61. isA(function_name:string, roles:Array<string>): boolean {
  62. return roles.indexOf('ROLE_' + function_name + '_CORE') >= 0
  63. }
  64. /**
  65. * Filtre les roles afin d'en exclure les "Roles fonctions"
  66. * @param {Array<string>} roles
  67. * @returns {Array<string>}
  68. */
  69. filterFunctionRoles(roles:Array<string>):Array<string>{
  70. return roles.filter(role => {
  71. return roles_by_function.indexOf(role) < 0
  72. })
  73. }
  74. /**
  75. * Avant la migration complète, quelque role disposent d'underscore en trop, on corrige cela...
  76. * @param {Array<string>} roles
  77. * @returns {Array<string>}
  78. */
  79. transformUnderscoreToHyphenBeforeCompleteMigration(roles: Array<string>): Array<string> {
  80. const regex = /(ROLE\_)([A-Z]*\_[A-Z]*)([A-Z\_]*)*/i;
  81. let match;
  82. roles = roles.map((role) => {
  83. if (roles_to_change.indexOf(role) >= 0) {
  84. if ((match = regex.exec(role)) !== null) {
  85. let role = match[1]
  86. let subject = match[2].replace('_', '-')
  87. let action = match[3]
  88. return role + subject + (action ? action : '')
  89. }
  90. }
  91. return role;
  92. });
  93. return roles
  94. }
  95. /**
  96. * On transforme les ROLES Symfony en Abilities
  97. * @param {Array<string>} roles
  98. * @returns {Array<AbilitiesType>}
  99. */
  100. transformRoleToAbilities(roles: Array<string>): [] | Array<AbilitiesType> {
  101. let abilities:any = [];
  102. const regex = /(ROLE\_)([A-Z\-]*)([\_A-Z]*)/i;
  103. let match;
  104. _.each(roles, role =>{
  105. if ((match = regex.exec(role)) !== null) {
  106. let subject = match[2]
  107. let action = match[3]
  108. abilities.push({
  109. action: action_map[action],
  110. subject: subject.toLowerCase()
  111. })
  112. }
  113. })
  114. return abilities;
  115. }
  116. }
  117. export const $roleUtils = new RoleUtils();