major update

This commit is contained in:
2026-03-04 15:56:58 +01:00
parent 16759a2732
commit 8f4dd5840d
478 changed files with 24313 additions and 8201 deletions

View File

@@ -5,119 +5,90 @@ namespace MintyPHP\Service\Access;
use MintyPHP\Repository\Access\PermissionRepository;
use MintyPHP\Repository\Access\RolePermissionRepository;
use MintyPHP\Repository\Access\UserRoleRepository;
use MintyPHP\Service\Directory\DirectoryScopeGateway;
use MintyPHP\Service\Directory\DirectoryServicesFactory;
class AccessServicesFactory
{
private ?PermissionRepository $permissionRepository = null;
private ?RolePermissionRepository $rolePermissionRepository = null;
private ?UserRoleRepository $userRoleRepository = null;
private ?PermissionService $permissionService = null;
private ?PermissionGateway $permissionGateway = null;
private ?DirectoryServicesFactory $directoryServicesFactory = null;
private ?DirectoryScopeGateway $directoryScopeGateway = null;
private ?UserAuthorizationPolicy $userAuthorizationPolicy = null;
private ?RoleAuthorizationPolicy $roleAuthorizationPolicy = null;
private ?PermissionAuthorizationPolicy $permissionAuthorizationPolicy = null;
private ?SettingsAuthorizationPolicy $settingsAuthorizationPolicy = null;
private ?TenantAuthorizationPolicy $tenantAuthorizationPolicy = null;
private ?DepartmentAuthorizationPolicy $departmentAuthorizationPolicy = null;
private ?AuthorizationService $authorizationService = null;
private ?AccessPolicyFactory $accessPolicyFactory = null;
private \Closure $accessPolicyFactoryResolver;
public function __construct(
private readonly AccessRepositoryFactory $accessRepositoryFactory,
private readonly AccessGatewayFactory $accessGatewayFactory,
callable $accessPolicyFactoryResolver
) {
$this->accessPolicyFactoryResolver = \Closure::fromCallable($accessPolicyFactoryResolver);
}
public function createPermissionRepository(): PermissionRepository
{
return $this->permissionRepository ??= new PermissionRepository();
return $this->accessRepositoryFactory->createPermissionRepository();
}
public function createRolePermissionRepository(): RolePermissionRepository
{
return $this->rolePermissionRepository ??= new RolePermissionRepository();
return $this->accessRepositoryFactory->createRolePermissionRepository();
}
public function createUserRoleRepository(): UserRoleRepository
{
return $this->userRoleRepository ??= new UserRoleRepository();
return $this->accessRepositoryFactory->createUserRoleRepository();
}
public function createPermissionService(): PermissionService
{
return $this->permissionService ??= new PermissionService(
$this->createPermissionRepository(),
$this->createRolePermissionRepository(),
$this->createUserRoleRepository()
);
return $this->accessGatewayFactory->createPermissionService();
}
public function createPermissionGateway(): PermissionGateway
{
return $this->permissionGateway ??= new PermissionGateway($this->createPermissionService());
return $this->accessGatewayFactory->createPermissionGateway();
}
public function createUserAuthorizationPolicy(): UserAuthorizationPolicy
{
return $this->userAuthorizationPolicy ??= new UserAuthorizationPolicy(
$this->createPermissionGateway(),
$this->createDirectoryScopeGateway()
);
return $this->accessPolicyFactory()->createUserAuthorizationPolicy();
}
public function createRoleAuthorizationPolicy(): RoleAuthorizationPolicy
{
return $this->roleAuthorizationPolicy ??= new RoleAuthorizationPolicy(
$this->createPermissionGateway()
);
return $this->accessPolicyFactory()->createRoleAuthorizationPolicy();
}
public function createPermissionAuthorizationPolicy(): PermissionAuthorizationPolicy
{
return $this->permissionAuthorizationPolicy ??= new PermissionAuthorizationPolicy(
$this->createPermissionGateway()
);
return $this->accessPolicyFactory()->createPermissionAuthorizationPolicy();
}
public function createSettingsAuthorizationPolicy(): SettingsAuthorizationPolicy
{
return $this->settingsAuthorizationPolicy ??= new SettingsAuthorizationPolicy(
$this->createPermissionGateway()
);
return $this->accessPolicyFactory()->createSettingsAuthorizationPolicy();
}
public function createTenantAuthorizationPolicy(): TenantAuthorizationPolicy
{
return $this->tenantAuthorizationPolicy ??= new TenantAuthorizationPolicy(
$this->createPermissionGateway(),
$this->createDirectoryScopeGateway()
);
return $this->accessPolicyFactory()->createTenantAuthorizationPolicy();
}
public function createDepartmentAuthorizationPolicy(): DepartmentAuthorizationPolicy
{
return $this->departmentAuthorizationPolicy ??= new DepartmentAuthorizationPolicy(
$this->createPermissionGateway(),
$this->createDirectoryScopeGateway()
);
return $this->accessPolicyFactory()->createDepartmentAuthorizationPolicy();
}
public function createAuthorizationService(): AuthorizationService
{
return $this->authorizationService ??= new AuthorizationService([
$this->createUserAuthorizationPolicy(),
$this->createRoleAuthorizationPolicy(),
$this->createPermissionAuthorizationPolicy(),
$this->createSettingsAuthorizationPolicy(),
$this->createTenantAuthorizationPolicy(),
$this->createDepartmentAuthorizationPolicy(),
]);
return $this->accessPolicyFactory()->createAuthorizationService();
}
private function createDirectoryScopeGateway(): DirectoryScopeGateway
private function accessPolicyFactory(): AccessPolicyFactory
{
return $this->directoryScopeGateway ??= $this->directoryServicesFactory()->createDirectoryScopeGateway();
}
if ($this->accessPolicyFactory !== null) {
return $this->accessPolicyFactory;
}
private function directoryServicesFactory(): DirectoryServicesFactory
{
return $this->directoryServicesFactory ??= new DirectoryServicesFactory();
$factory = ($this->accessPolicyFactoryResolver)();
if (!$factory instanceof AccessPolicyFactory) {
throw new \RuntimeException('Access policy resolver must return AccessPolicyFactory');
}
return $this->accessPolicyFactory = $factory;
}
}