weitere updates für instanzierbarkeit und sauberes testing
This commit is contained in:
@@ -5,6 +5,8 @@ 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
|
||||
{
|
||||
@@ -13,6 +15,15 @@ class AccessServicesFactory
|
||||
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;
|
||||
|
||||
public function createPermissionRepository(): PermissionRepository
|
||||
{
|
||||
@@ -42,4 +53,71 @@ class AccessServicesFactory
|
||||
{
|
||||
return $this->permissionGateway ??= new PermissionGateway($this->createPermissionService());
|
||||
}
|
||||
|
||||
public function createUserAuthorizationPolicy(): UserAuthorizationPolicy
|
||||
{
|
||||
return $this->userAuthorizationPolicy ??= new UserAuthorizationPolicy(
|
||||
$this->createPermissionGateway(),
|
||||
$this->createDirectoryScopeGateway()
|
||||
);
|
||||
}
|
||||
|
||||
public function createRoleAuthorizationPolicy(): RoleAuthorizationPolicy
|
||||
{
|
||||
return $this->roleAuthorizationPolicy ??= new RoleAuthorizationPolicy(
|
||||
$this->createPermissionGateway()
|
||||
);
|
||||
}
|
||||
|
||||
public function createPermissionAuthorizationPolicy(): PermissionAuthorizationPolicy
|
||||
{
|
||||
return $this->permissionAuthorizationPolicy ??= new PermissionAuthorizationPolicy(
|
||||
$this->createPermissionGateway()
|
||||
);
|
||||
}
|
||||
|
||||
public function createSettingsAuthorizationPolicy(): SettingsAuthorizationPolicy
|
||||
{
|
||||
return $this->settingsAuthorizationPolicy ??= new SettingsAuthorizationPolicy(
|
||||
$this->createPermissionGateway()
|
||||
);
|
||||
}
|
||||
|
||||
public function createTenantAuthorizationPolicy(): TenantAuthorizationPolicy
|
||||
{
|
||||
return $this->tenantAuthorizationPolicy ??= new TenantAuthorizationPolicy(
|
||||
$this->createPermissionGateway(),
|
||||
$this->createDirectoryScopeGateway()
|
||||
);
|
||||
}
|
||||
|
||||
public function createDepartmentAuthorizationPolicy(): DepartmentAuthorizationPolicy
|
||||
{
|
||||
return $this->departmentAuthorizationPolicy ??= new DepartmentAuthorizationPolicy(
|
||||
$this->createPermissionGateway(),
|
||||
$this->createDirectoryScopeGateway()
|
||||
);
|
||||
}
|
||||
|
||||
public function createAuthorizationService(): AuthorizationService
|
||||
{
|
||||
return $this->authorizationService ??= new AuthorizationService([
|
||||
$this->createUserAuthorizationPolicy(),
|
||||
$this->createRoleAuthorizationPolicy(),
|
||||
$this->createPermissionAuthorizationPolicy(),
|
||||
$this->createSettingsAuthorizationPolicy(),
|
||||
$this->createTenantAuthorizationPolicy(),
|
||||
$this->createDepartmentAuthorizationPolicy(),
|
||||
]);
|
||||
}
|
||||
|
||||
private function createDirectoryScopeGateway(): DirectoryScopeGateway
|
||||
{
|
||||
return $this->directoryScopeGateway ??= $this->directoryServicesFactory()->createDirectoryScopeGateway();
|
||||
}
|
||||
|
||||
private function directoryServicesFactory(): DirectoryServicesFactory
|
||||
{
|
||||
return $this->directoryServicesFactory ??= new DirectoryServicesFactory();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user