124 lines
4.6 KiB
PHP
124 lines
4.6 KiB
PHP
<?php
|
|
|
|
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;
|
|
|
|
public function createPermissionRepository(): PermissionRepository
|
|
{
|
|
return $this->permissionRepository ??= new PermissionRepository();
|
|
}
|
|
|
|
public function createRolePermissionRepository(): RolePermissionRepository
|
|
{
|
|
return $this->rolePermissionRepository ??= new RolePermissionRepository();
|
|
}
|
|
|
|
public function createUserRoleRepository(): UserRoleRepository
|
|
{
|
|
return $this->userRoleRepository ??= new UserRoleRepository();
|
|
}
|
|
|
|
public function createPermissionService(): PermissionService
|
|
{
|
|
return $this->permissionService ??= new PermissionService(
|
|
$this->createPermissionRepository(),
|
|
$this->createRolePermissionRepository(),
|
|
$this->createUserRoleRepository()
|
|
);
|
|
}
|
|
|
|
public function createPermissionGateway(): PermissionGateway
|
|
{
|
|
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();
|
|
}
|
|
}
|