src/Security/ExportVoter.php line 214

Open in your IDE?
  1. <?php
  2. //------------------------------------------------------------------------------
  3. // src/Security/ExportVoter.php
  4. //------------------------------------------------------------------------------
  5. namespace App\Security;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. use App\Entity\Access;
  10. use App\Entity\Config\Config;
  11. use App\Entity\Config\Module;
  12. use App\Entity\HR\AccessFunction;
  13. use App\Entity\Security\Acl;
  14. use App\Entity\Security\AclPermission;
  15. use App\Services\Config\ModuleTools;
  16. class ExportVoter extends Voter
  17. {
  18.     //--------------------------------------------------------------------------------
  19.     // is_granted constants
  20.     const IS_ACTIVE = "export_is_active";
  21.     const EXPORT_ANY = "export_data";
  22.     const EXPORT_INVOICE = "export_invoices";
  23.     const EXPORT_INVOICE_SOCIETY = "export_invoices_society";
  24.     const EXPORT_INVOICE_ANY = "export_invoices_any";
  25.     const EXPORT_DEVIS = "export_devis";
  26.     const EXPORT_DEVIS_SOCIETY = "export_devis_society";
  27.     const EXPORT_DEVIS_ANY = "export_devis_any";
  28.     const EXPORT_COMMAND = "export_commands";
  29.     const EXPORT_COMMAND_SOCIETY = "export_commands_society";
  30.     const EXPORT_COMMAND_ANY = "export_commands_any";
  31.     const EXPORT_TASK = "export_tasks";
  32.     const EXPORT_TASK_SOCIETY = "export_tasks_society";
  33.     const EXPORT_TASK_ANY = "export_tasks_any";
  34.     const EXPORT_MISSION = "export_missions";
  35.     const EXPORT_MISSION_SOCIETY = "export_missions_society";
  36.     const EXPORT_MISSION_ANY = "export_missions_any";
  37.     const EXPORT_IND = "export_individuals";
  38.     const EXPORT_IND_SOCIETY = "export_individuals_society";
  39.     const EXPORT_IND_ANY = "export_individuals_any";
  40.     const EXPORT_RFI = "export_rfi";
  41.     const EXPORT_RFI_SOCIETY = "export_rfi_society";
  42.     const EXPORT_RFI_ANY = "export_rfi_any";
  43.     const EXPORT_ANOMALY = "export_anomaly";
  44.     const EXPORT_ANOMALY_SOCIETY = "export_anomaly_society";
  45.     const EXPORT_ANOMALY_ANY = "export_anomaly_any";
  46.     // Plan.io Task #4691
  47.     const EXPORT_CUSTOM_REPORT = "export_custom_report";
  48.     const EXPORT_CUSTOM_REPORT_SOCIETY = "export_custom_report_society";
  49.     const EXPORT_CUSTOM_REPORT_ANY = "export_custom_report_any";
  50.     const EXPORT_INSTALLMENT = "export_installment";
  51.     const EXPORT_INSTALLMENT_SOCIETY = "export_installment_society";
  52.     const EXPORT_INSTALLMENT_ANY = "export_installment_any";
  53.     const EXPORT_EQUIPMENT = "export_equipment";
  54.     const EXPORT_EQUIPMENT_SOCIETY = "export_equipment_society";
  55.     const EXPORT_EQUIPMENT_ANY = "export_equipment_any";
  56.     // Plan.io Tasks #3621 #3653
  57.     const EXPORT_IKEA_SERVICE_ORDER = "export_ikea_service_orders";
  58.     const EXPORT_IKEA_SERVICE_ORDER_SOCIETY = "export_ikea_service_orders_society";
  59.     const EXPORT_IKEA_SERVICE_ORDER_ANY = "export_ikea_service_orders_any";
  60.     const EXPORT_SALARY = "export_salary";
  61.     const EXPORT_SALARY_SOCIETY = "export_salary_society";
  62.     const EXPORT_SALARY_ANY = "export_salary_any";
  63.     const EXPORT_DEMAND = "export_demand";
  64.     const EXPORT_DEMAND_SOCIETY = "export_demand_society";
  65.     const EXPORT_DEMAND_ANY = "export_demand_any";
  66.     // Task plan.io #3889 : No right for society
  67.     const EXPORT_ITASK = "export_itask";
  68.     const EXPORT_ITASK_ANY = "export_itask_any";
  69.     // Task plan.io #4426
  70.     const EXPORT_COST = "export_cost";
  71.     const EXPORT_COST_SOCIETY = "export_cost_society";
  72.     const EXPORT_COST_ANY = "export_cost_any";
  73.     const IS_GRANTED_CONSTANTS = array(
  74.         self::IS_ACTIVE,
  75.         self::EXPORT_ANY,
  76.         self::EXPORT_INVOICE,
  77.         self::EXPORT_INVOICE_SOCIETY,
  78.         self::EXPORT_INVOICE_ANY,
  79.         self::EXPORT_DEVIS,
  80.         self::EXPORT_DEVIS_SOCIETY,
  81.         self::EXPORT_DEVIS_ANY,
  82.         self::EXPORT_COMMAND,
  83.         self::EXPORT_COMMAND_SOCIETY,
  84.         self::EXPORT_COMMAND_ANY,
  85.         self::EXPORT_TASK,
  86.         self::EXPORT_TASK_SOCIETY,
  87.         self::EXPORT_TASK_ANY,
  88.         self::EXPORT_MISSION,
  89.         self::EXPORT_MISSION_SOCIETY,
  90.         self::EXPORT_MISSION_ANY,
  91.         self::EXPORT_IND,
  92.         self::EXPORT_IND_SOCIETY,
  93.         self::EXPORT_IND_ANY,
  94.         self::EXPORT_RFI,
  95.         self::EXPORT_RFI_SOCIETY,
  96.         self::EXPORT_RFI_ANY,
  97.         self::EXPORT_ANOMALY,
  98.         self::EXPORT_ANOMALY_SOCIETY,
  99.         self::EXPORT_ANOMALY_ANY,
  100.         self::EXPORT_CUSTOM_REPORT,
  101.         self::EXPORT_CUSTOM_REPORT_SOCIETY,
  102.         self::EXPORT_CUSTOM_REPORT_ANY,
  103.         self::EXPORT_INSTALLMENT,
  104.         self::EXPORT_INSTALLMENT_SOCIETY,
  105.         self::EXPORT_INSTALLMENT_ANY,
  106.         self::EXPORT_EQUIPMENT,
  107.         self::EXPORT_EQUIPMENT_SOCIETY,
  108.         self::EXPORT_EQUIPMENT_ANY,
  109.         // Plan.io Tasks #3621 #3653
  110.         self::EXPORT_IKEA_SERVICE_ORDER,
  111.         self::EXPORT_IKEA_SERVICE_ORDER_SOCIETY,
  112.         self::EXPORT_IKEA_SERVICE_ORDER_ANY,
  113.         self::EXPORT_SALARY,
  114.         self::EXPORT_SALARY_SOCIETY,
  115.         self::EXPORT_SALARY_ANY,
  116.         self::EXPORT_DEMAND,
  117.         self::EXPORT_DEMAND_SOCIETY,
  118.         self::EXPORT_DEMAND_ANY,
  119.         self::EXPORT_ITASK,
  120.         self::EXPORT_ITASK_ANY,
  121.         self::EXPORT_COST,
  122.         self::EXPORT_COST_SOCIETY,
  123.         self::EXPORT_COST_ANY,
  124.     );
  125.     //--------------------------------------------------------------------------------
  126.     // acl constants
  127.     const ACL_PERM_EXPORT_INVOICE = "invoice_export";
  128.     const ACL_PERM_EXPORT_INVOICE_SOCIETY = "invoice_export_society";
  129.     const ACL_PERM_EXPORT_DEVIS = "devis_export";
  130.     const ACL_PERM_EXPORT_DEVIS_SOCIETY = "devis_export_society";
  131.     const ACL_PERM_EXPORT_COMMAND = "command_export";
  132.     const ACL_PERM_EXPORT_COMMAND_SOCIETY = "command_export_society";
  133.     const ACL_PERM_EXPORT_TASK = "task_export";
  134.     const ACL_PERM_EXPORT_TASK_SOCIETY = "task_export_society";
  135.     const ACL_PERM_EXPORT_MISSION = "mission_export";
  136.     const ACL_PERM_EXPORT_MISSION_SOCIETY = "mission_export_society";
  137.     const ACL_PERM_EXPORT_IND = "ind_export";
  138.     const ACL_PERM_EXPORT_IND_SOCIETY = "ind_export_society";
  139.     const ACL_PERM_EXPORT_RFI = "webapp_doc_export_rfi";
  140.     const ACL_PERM_EXPORT_RFI_SOCIETY = "webapp_doc_export_rfi_society";
  141.     const ACL_PERM_EXPORT_ANOMALY = "webapp_doc_export_anomaly";
  142.     const ACL_PERM_EXPORT_ANOMALY_SOCIETY = "webapp_doc_export_anomaly_society";
  143.     // Plan.io Task #4691
  144.     const ACL_PERM_EXPORT_CUSTOM_REPORT = "webapp_doc_export_custom_report";
  145.     const ACL_PERM_EXPORT_CUSTOM_REPORT_SOCIETY = "webapp_doc_export_custom_report_society";
  146.     const ACL_PERM_EXPORT_INSTALLMENT = "installment_export";
  147.     const ACL_PERM_EXPORT_INSTALLMENT_SOCIETY = "installment_export_society";
  148.     const ACL_PERM_EXPORT_EQUIPMENT = "equipment_export";
  149.     const ACL_PERM_EXPORT_EQUIPMENT_SOCIETY = "equipment_export_society";
  150.     // Plan.io Tasks #3621 #3653
  151.     const ACL_PERM_EXPORT_IKEA_SERVICE_ORDER = "ikea_service_order_export";
  152.     const ACL_PERM_EXPORT_IKEA_SERVICE_ORDER_SOCIETY = "ikea_service_order_export_society";
  153.     // Plan.io Task #3884
  154.     const ACL_PERM_EXPORT_SALARY = "salary_export";
  155.     const ACL_PERM_EXPORT_SALARY_SOCIETY = "salary_export_society";
  156.     // Plan.io Task #3889
  157.     const ACL_PERM_EXPORT_DEMAND = "demand_export";
  158.     const ACL_PERM_EXPORT_DEMAND_SOCIETY = "demand_export_society";
  159.     // Plan.io Task #3889
  160.     const ACL_PERM_EXPORT_ITASK = "itask_export";
  161.     // Plan.io Task #4426
  162.     const ACL_PERM_EXPORT_COST = "cost_export";
  163.     const ACL_PERM_EXPORT_COST_SOCIETY = "cost_export_society";
  164.     //--------------------------------------------------------------------------------
  165.     public function __construct(ManagerRegistry $doctrine, ModuleTools $moduleTools)
  166.     {
  167.         $this->em = $doctrine->getManager();
  168.         $this->moduleTools = $moduleTools;
  169.         $this->aclRepository = $this->em->getRepository(Acl::class);
  170.         $this->aclPermissionRepository = $this->em->getRepository(AclPermission::class);
  171.     }
  172.     // Plan.io Task #4453 [See AccessVoter for details]
  173.     public function supportsAttribute(string $attribute): bool
  174.     {
  175.         return in_array($attribute, self::IS_GRANTED_CONSTANTS, true);
  176.     }
  177.     
  178.     protected function supports(string $attribute, $subject = null): bool
  179.     {
  180.         // if the attribute isn't one we support, return false
  181.         if (!in_array($attribute, self::IS_GRANTED_CONSTANTS))
  182.         {
  183.             return false;
  184.         }
  185.         return true;
  186.     }
  187.     protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
  188.     {
  189.         $user = $token->getUser();
  190.         if (!$user instanceof Access)
  191.         {
  192.             // the user must be logged in; if not, deny access
  193.             return false;
  194.         }
  195.         // The user must have a function; if not deny access
  196.         $function = $user->getFunction();
  197.         if ($function === null)        return false;
  198.         // Plan.io Task #3710 : Get current group
  199.         $currentGroup = $user->getSocietyGroup();
  200.         if ($currentGroup === null)
  201.             return false;
  202.         // Module activated ?
  203.         if ($this->moduleTools->isInactiveByCode($currentGroup, Module::MODULE_EXPORT))
  204.         {
  205.             return false;
  206.         }
  207.         // No subject for this voter
  208.         switch ($attribute)
  209.         {
  210.             case self::IS_ACTIVE:
  211.                 return true;
  212.             case self::EXPORT_ANY:
  213.                 return $this->canExportAnyGeneric($user, $function);
  214.             case self::EXPORT_INVOICE:
  215.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_INVOICE);
  216.             case self::EXPORT_INVOICE_SOCIETY:
  217.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_INVOICE_SOCIETY);
  218.             case self::EXPORT_INVOICE_ANY:
  219.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_INVOICE, self::ACL_PERM_EXPORT_INVOICE_SOCIETY);
  220.             case self::EXPORT_DEVIS:
  221.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_DEVIS);
  222.             case self::EXPORT_DEVIS_SOCIETY:
  223.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_DEVIS_SOCIETY);
  224.             case self::EXPORT_DEVIS_ANY:
  225.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_DEVIS, self::ACL_PERM_EXPORT_DEVIS_SOCIETY);
  226.             case self::EXPORT_COMMAND:
  227.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_COMMAND);
  228.             case self::EXPORT_COMMAND_SOCIETY:
  229.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_COMMAND_SOCIETY);
  230.             case self::EXPORT_COMMAND_ANY:
  231.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_COMMAND, self::ACL_PERM_EXPORT_COMMAND_SOCIETY);
  232.             case self::EXPORT_TASK:
  233.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_TASK);
  234.             case self::EXPORT_TASK_SOCIETY:
  235.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_TASK_SOCIETY);
  236.             case self::EXPORT_TASK_ANY:
  237.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_TASK, self::ACL_PERM_EXPORT_TASK_SOCIETY);
  238.             case self::EXPORT_MISSION:
  239.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_MISSION);
  240.             case self::EXPORT_MISSION_SOCIETY:
  241.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_MISSION_SOCIETY);
  242.             case self::EXPORT_MISSION_ANY:
  243.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_MISSION, self::ACL_PERM_EXPORT_MISSION_SOCIETY);
  244.             case self::EXPORT_IND:
  245.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_IND);
  246.             case self::EXPORT_IND_SOCIETY:
  247.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_IND_SOCIETY);
  248.             case self::EXPORT_IND_ANY:
  249.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_IND, self::ACL_PERM_EXPORT_IND_SOCIETY);
  250.             case self::EXPORT_RFI:
  251.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_RFI);
  252.             case self::EXPORT_RFI_SOCIETY:
  253.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_RFI_SOCIETY);
  254.             case self::EXPORT_RFI_ANY:
  255.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_RFI, self::ACL_PERM_EXPORT_RFI_SOCIETY);
  256.             case self::EXPORT_ANOMALY:
  257.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_ANOMALY);
  258.             case self::EXPORT_ANOMALY_SOCIETY:
  259.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_ANOMALY_SOCIETY);
  260.             case self::EXPORT_ANOMALY_ANY:
  261.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_ANOMALY, self::ACL_PERM_EXPORT_ANOMALY_SOCIETY);
  262.             case self::EXPORT_CUSTOM_REPORT:
  263.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_CUSTOM_REPORT);
  264.             case self::EXPORT_CUSTOM_REPORT_SOCIETY:
  265.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_CUSTOM_REPORT_SOCIETY);
  266.             case self::EXPORT_CUSTOM_REPORT_ANY:
  267.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_CUSTOM_REPORT, self::ACL_PERM_EXPORT_CUSTOM_REPORT_SOCIETY);
  268.             case self::EXPORT_INSTALLMENT:
  269.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_INSTALLMENT);
  270.             case self::EXPORT_INSTALLMENT_SOCIETY:
  271.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_INSTALLMENT_SOCIETY);
  272.             case self::EXPORT_INSTALLMENT_ANY:
  273.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_INSTALLMENT, self::ACL_PERM_EXPORT_INSTALLMENT_SOCIETY);
  274.             case self::EXPORT_EQUIPMENT:
  275.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_EQUIPMENT);
  276.             case self::EXPORT_EQUIPMENT_SOCIETY:
  277.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_EQUIPMENT_SOCIETY);
  278.             case self::EXPORT_EQUIPMENT_ANY:
  279.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_EQUIPMENT, self::ACL_PERM_EXPORT_EQUIPMENT_SOCIETY);
  280.             // Plan.io Tasks #3621 #3653 : Begin
  281.             case self::EXPORT_IKEA_SERVICE_ORDER:
  282.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_IKEA_SERVICE_ORDER);
  283.             case self::EXPORT_IKEA_SERVICE_ORDER_SOCIETY:
  284.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_IKEA_SERVICE_ORDER_SOCIETY);
  285.             case self::EXPORT_IKEA_SERVICE_ORDER_ANY:
  286.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_IKEA_SERVICE_ORDER, self::ACL_PERM_EXPORT_IKEA_SERVICE_ORDER_SOCIETY);
  287.             // Plan.io Tasks #3621 #3653 : End
  288.             case self::EXPORT_SALARY:
  289.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_SALARY);
  290.             case self::EXPORT_SALARY_SOCIETY:
  291.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_SALARY_SOCIETY);
  292.             case self::EXPORT_SALARY_ANY:
  293.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_SALARY, self::ACL_PERM_EXPORT_SALARY_SOCIETY);
  294.             case self::EXPORT_DEMAND:
  295.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_DEMAND);
  296.             case self::EXPORT_DEMAND_SOCIETY:
  297.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_DEMAND_SOCIETY);
  298.             case self::EXPORT_DEMAND_ANY:
  299.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_DEMAND, self::ACL_PERM_EXPORT_DEMAND_SOCIETY);
  300.             case self::EXPORT_ITASK:
  301.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_ITASK);
  302.             case self::EXPORT_ITASK_ANY:
  303.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_ITASK, null);
  304.             case self::EXPORT_COST:
  305.                 return $this->canExport($user, $function, self::ACL_PERM_EXPORT_COST);
  306.             case self::EXPORT_COST_SOCIETY:
  307.                 return $this->canExportSociety($user, $function, self::ACL_PERM_EXPORT_COST_SOCIETY);
  308.             case self::EXPORT_COST_ANY:
  309.                 return $this->canExportAny($user, $function, self::ACL_PERM_EXPORT_COST, self::ACL_PERM_EXPORT_COST_SOCIETY);
  310.         }
  311.         throw new \LogicException('This code should not be reached!');
  312.     }
  313.     private function canExportAnyGeneric(Access $user, AccessFunction $function)
  314.     {
  315.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_INVOICE, self::ACL_PERM_EXPORT_INVOICE_SOCIETY))
  316.             return true;
  317.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_DEVIS, self::ACL_PERM_EXPORT_DEVIS_SOCIETY))
  318.             return true;
  319.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_COMMAND, self::ACL_PERM_EXPORT_COMMAND_SOCIETY))
  320.             return true;
  321.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_TASK, self::ACL_PERM_EXPORT_TASK_SOCIETY))
  322.             return true;
  323.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_MISSION, self::ACL_PERM_EXPORT_MISSION_SOCIETY))
  324.             return true;
  325.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_IND, self::ACL_PERM_EXPORT_IND_SOCIETY))
  326.             return true;
  327.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_RFI, self::ACL_PERM_EXPORT_RFI_SOCIETY))
  328.             return true;
  329.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_ANOMALY, self::ACL_PERM_EXPORT_ANOMALY_SOCIETY))
  330.             return true;
  331.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_CUSTOM_REPORT, self::ACL_PERM_EXPORT_CUSTOM_REPORT_SOCIETY))
  332.             return true;
  333.         // Plan.io Tasks #3621 #3653
  334.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_IKEA_SERVICE_ORDER, self::ACL_PERM_EXPORT_IKEA_SERVICE_ORDER_SOCIETY))
  335.             return true;
  336.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_SALARY, self::ACL_PERM_EXPORT_SALARY_SOCIETY))
  337.             return true;
  338.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_DEMAND, self::ACL_PERM_EXPORT_DEMAND_SOCIETY))
  339.             return true;
  340.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_ITASK, null))
  341.             return true;
  342.         if ($this->canExportAny($user, $function, self::ACL_PERM_EXPORT_COST, self::ACL_PERM_EXPORT_COST_SOCIETY))
  343.             return true;
  344.         return false;
  345.     }
  346.     private function canExport(Access $user, AccessFunction $function, $aclPermConstant)
  347.     {
  348.         // Get Acl_Permission
  349.         $aclPerm = $this->aclPermissionRepository->findOneByName($aclPermConstant);
  350.         if ($aclPerm === null)        return false;
  351.         // Get Acl
  352.         $acl = $this->aclRepository->findOneBy(array(
  353.             'function'        =>    $function,
  354.             'permission'    =>    $aclPerm
  355.         ));
  356.         if ($acl === null)        return false;
  357.         // Since only one acl type can exist
  358.         // we can return the result of the acl_permission
  359.         return $acl->getValue();
  360.     }
  361.     private function canExportSociety(Access $user, AccessFunction $function, $aclPermConstant)
  362.     {
  363.         // Get Acl_Permission
  364.         $aclPerm = $this->aclPermissionRepository->findOneByName($aclPermConstant);
  365.         if ($aclPerm === null)        return false;
  366.         // Get Acl
  367.         $acl = $this->aclRepository->findOneBy(array(
  368.             'function'        =>    $function,
  369.             'permission'    =>    $aclPerm
  370.         ));
  371.         if ($acl === null)        return false;
  372.         // Since only one acl type can exist
  373.         // we can return the result of the acl_permission
  374.         // Further filtering is done in the Controller
  375.         return $acl->getValue();
  376.     }
  377.     private function canExportAny(Access $user, AccessFunction $function, $aclPermConstant, $aclPermConstantSociety)
  378.     {
  379.         // Three Acl_Permission may exist
  380.         $aclPerm = $this->aclPermissionRepository->findOneByName($aclPermConstant);
  381.         $aclPermSociety = $this->aclPermissionRepository->findOneByName($aclPermConstantSociety);
  382.         // If all are null, exit
  383.         if ($aclPerm === null && $aclPermSociety === null)
  384.             return false;
  385.         // Get First one
  386.         if ($aclPerm !== null)
  387.         {
  388.             $acl = $this->aclRepository->findOneBy(array(
  389.                 'function'        =>    $function,
  390.                 'permission'    =>    $aclPerm
  391.             ));
  392.             if ($acl !== null)
  393.             {
  394.                 if ($acl->getValue())
  395.                 {
  396.                     // A single positive answer is enough
  397.                     return true;
  398.                 }
  399.             }
  400.         }
  401.         // If we are here it means that nothing good has been found
  402.         // Load second permission
  403.         if ($aclPermSociety !== null)
  404.         {
  405.             $acl = $this->aclRepository->findOneBy(array(
  406.                 'function'        =>    $function,
  407.                 'permission'    =>    $aclPermSociety
  408.             ));
  409.             if ($acl !== null)
  410.             {
  411.                 if ($acl->getValue())
  412.                 {
  413.                     // A single positive answer is enough
  414.                     return true;
  415.                 }
  416.             }
  417.         }
  418.         // If we are here, all hope is lost
  419.         return false;
  420.     }
  421. }