Commit 20fc1f94 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Possibilité d'activer la mise en cache du tableau des rôles par privilège pour...

Possibilité d'activer la mise en cache du tableau des rôles par privilège pour accélerer l'init du moteur d'ACL.
parent fbc93c62
Loading
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
Journal des modifications
=========================


6.3.0
-----
- Possibilité d'activer la mise en cache du tableau des rôles par privilège pour accélerer l'init du moteur d'ACL.

6.0.5 (19/12/2023)
------------------

- [Fix] Un seul privilège peut être transmis sous forme de string à convertir en array 

6.0.1 (21/03/2023)
+3 −0
Original line number Diff line number Diff line
@@ -8,10 +8,13 @@
        }
    ],
    "require": {
        "laminas/laminas-cache": "^3.13",
        "laminas/laminas-cache-storage-adapter-filesystem": "^2.5",
        "unicaen/app": ">=5.0",
	    "unicaen/utilisateur": ">=6.2"
    },
    "require-dev": {
        "laminas/laminas-cli": "^1.11",
        "phpunit/phpunit": ">=3.7"
    },
    "autoload": {
+109 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenPrivilege;

use Laminas\Cache\Storage\Adapter\Filesystem;
use Laminas\Router\Http\Literal;
use UnicaenPrivilege\Command\ClearCacheCommand;
use UnicaenPrivilege\Command\ClearCacheCommandFactory;
use UnicaenPrivilege\Controller\CacheController;
use UnicaenPrivilege\Controller\CacheControllerFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
use UnicaenPrivilege\Provider\Cache\CachePrivileges;
use UnicaenPrivilege\Service\Cache\CacheService;
use UnicaenPrivilege\Service\Cache\CacheServiceFactory;

return [
    'unicaen-auth' => [
        /**
         * Nom du cache du module (à déclarer via la clé de config 'caches').
         */
        'module_cache_name' => 'unicaen-privilege-cache',

        /**
         * Activation ou non de la mise en cache du tableau `privilège => [rôles ayant ce privilège]`.
         * @see \UnicaenPrivilege\Provider\Privilege\PrivilegeProvider::getPrivilegesRoles()
         */
        'privileges_roles_cache_enabled' => false,
    ],

    'caches' => [
        'unicaen-privilege-cache' => [
            'adapter' => Filesystem::class,
            //'adapter' => \Laminas\Cache\Storage\Adapter\Apcu::class,
            // ATTENTION : ne pas utiliser le cache APCu car le vidage est impossible depuis la ligne de commande (car instance du cache cli <> instance du cache web)
            'options' => [
                'ttl' => 60*60*24, // 24h
                'cache_dir' => '/tmp',
            ],
            'plugins' => [
                ['name' => 'Serializer'],
            ],
        ],
    ],

    'laminas-cli' => [
        'commands' => [
            'privilege:clear-cache' => ClearCacheCommand::class,
        ],
    ],

    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => CacheController::class,
                    'action' => [
                        'clear-privileges-roles',
                    ],
                    'privileges' => [
                        CachePrivileges::PRIVILEGE_CLEAR_PRIVILEGES_ROLES,
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'unicaen-privilege' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/cache',
                    'defaults' => [
                        'controller' => CacheController::class,
                    ],
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'attribuer' => [
                        'type' => Literal::class,
                        'options' => [
                            'route'    => '/clear-privileges-roles',
                            'defaults' => [
                                /** @see CacheController::clearPrivilegesRolesAction() */
                                'controller' => CacheController::class,
                                'action' => 'clear-privileges-roles',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'controllers' => [
        'factories' => [

            CacheController::class => CacheControllerFactory::class,

        ]
    ],

    'service_manager' => [
        'factories' => [
            CacheService::class => CacheServiceFactory::class,
            ClearCacheCommand::class => ClearCacheCommandFactory::class,
        ],
    ],
];
+3 −1
Original line number Diff line number Diff line
@@ -11,6 +11,8 @@ use UnicaenPrivilege\Form\Privilege\CategorieFormFactory;
use UnicaenPrivilege\Form\Privilege\PrivilegeForm;
use UnicaenPrivilege\Form\Privilege\PrivilegeFormFactory;
use UnicaenPrivilege\Provider\Privilege\PrivilegePrivileges;
use UnicaenPrivilege\Provider\Privilege\PrivilegeProvider;
use UnicaenPrivilege\Provider\Privilege\PrivilegeProviderFactory;
use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider;
use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProviderFactory;
use UnicaenPrivilege\Service\Privilege\PrivilegeCategorieService;
@@ -22,7 +24,6 @@ use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;

return [

    'bjyauthorize' => [
        'guards' => [
            UnicaenPrivilege\Guard\PrivilegeController::class => [
@@ -250,6 +251,7 @@ return [
        'factories' => [
            PrivilegeCategorieService::class => PrivilegeCategorieServiceFactory::class,
            PrivilegeService::class => PrivilegeServiceFactory::class,
            PrivilegeProvider::class => PrivilegeProviderFactory::class,
            PrivilegeRuleProvider::class => PrivilegeRuleProviderFactory::class,
        ],
    ],
+10 −4
Original line number Diff line number Diff line
<?php

use UnicaenPrivilege\Provider\Privilege\PrivilegePrivileges;
use UnicaenPrivilege\Provider\Privilege\PrivilegeProvider;
use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider;
use UnicaenPrivilege\Service\Privilege\PrivilegeService;
use UnicaenPrivilege\Entity\Db\Privilege;
use UnicaenUtilisateur\Provider\Privilege\RolePrivileges;

@@ -22,16 +22,22 @@ if ($settings['unicaen-auth']['enable_privileges']) {
             * NB: la classe spécifiée doit hériter de @see \UnicaenPrivilege\Entity\Db\AbstractPrivilege
             */
            'privilege_entity_class' => Privilege::class,

            /**
             * Activation ou non de la mise en cache du tableau `privilège => [rôles ayant ce privilège]`.
             * @see \UnicaenPrivilege\Provider\Privilege\PrivilegeProvider::getPrivilegesRoles()
             */
            'privileges_roles_cache_enabled' => false,
        ],

        'bjyauthorize' => [

            'resource_providers' => [
                /**
                 * Le service Privilege peut aussi être une source de ressources,
                 * si on souhaite tester directement l'accès à un privilège
                 * Le PrivilegeProvider est aussi une source de Ressource, du fait que dans unicaen/auth
                 * on souhaite tester directement l'accès à un privilège (i.e. privilège === ressource).
                 */
                PrivilegeService::class => [],
                PrivilegeProvider::class => [],
            ],

            'rule_providers'     => [
Loading