Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
1 / 1
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3declare(strict_types=1);
4
5/** @license For full copyright and license information, please see the LICENSE.md file. */
6
7namespace App\Core\Access\Application\Service;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11use App\Core\Access\Domain\Model\AccessRule;
12use App\Core\Access\Domain\Model\ModuleAccessLevel;
13
14/**
15 * Access Management Application Service Contract.
16 *
17 * Defines the public contract for managing module permissions, explicit rules, and cache compilation.
18 *
19 * @package App\Core\Access\Application\Service
20 */
21interface AccessManagerServiceInterface
22{
23    /**
24     * Builds module permissions matrix with counts and metadata, optionally filtered by scope.
25     *
26     * @param string|null $scope Scope filter ('admin', 'client', or null for all).
27     * @return list<array<string, mixed>> List of module descriptors with access levels.
28     */
29    public function getModuleMatrix(?string $scope = null): array;
30
31    /**
32     * Updates base access level for a module.
33     *
34     * @param string   $moduleName Target module.
35     * @param string   $levelValue Raw enum value.
36     * @param int|null $userId     Actor user ID.
37     * @return ModuleAccessLevel Resulting access tier.
38     */
39    public function updateModuleLevel(string $moduleName, string $levelValue, ?int $userId = null): ModuleAccessLevel;
40
41    /**
42     * Retrieves all defined rules for a module.
43     *
44     * @param string $moduleName Target module.
45     * @return list<array<string, mixed>> Serialized rule array list.
46     */
47    public function getModuleRules(string $moduleName): array;
48
49    /**
50     * Creates and compiles a new access rule.
51     *
52     * @param array<string, mixed> $payload Incoming rule definition.
53     * @param int|null             $userId  Author user ID.
54     * @return AccessRule Created rule entity.
55     */
56    public function createRule(array $payload, ?int $userId = null): AccessRule;
57
58    /**
59     * Deletes an existing access rule and recompiles cache.
60     *
61     * @param int $ruleId Rule identifier.
62     * @return bool True if deleted.
63     */
64    public function deleteRule(int $ruleId): bool;
65
66    /**
67     * Forces full recompile of all modules and users.
68     */
69    public function recompileAll(): void;
70
71    /**
72     * Updates base access level for multiple modules.
73     *
74     * @param string             $levelValue  Raw enum value.
75     * @param array<int, string> $moduleNames Target module names (empty for all).
76     * @param int|null           $userId      Actor user ID.
77     * @return int Number of updated modules.
78     */
79    public function bulkUpdateModuleLevels(
80        string $levelValue,
81        array $moduleNames = [],
82        ?int $userId = null
83    ): int;
84
85    /**
86     * Builds precalculated access permissions matrix for a specific user.
87     *
88     * @param int $userId Target user ID.
89     * @return array<string, mixed> User access matrix with module breakdown and cache status.
90     */
91    public function getUserAccessMatrix(int $userId): array;
92}