acl generics

This commit is contained in:
Yuri Kuznetsov
2022-03-12 19:59:55 +02:00
parent 0a5a82fb38
commit fca55da02f
30 changed files with 105 additions and 15 deletions

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\ActionHistoryRecord>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Attachment>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
private const ATTR_CREATED_BY_ID = 'createdById';

View File

@@ -40,6 +40,10 @@ use Espo\Core\{
Acl\OwnershipTeamChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Email>
* @implements OwnershipTeamChecker<\Espo\Entities\Email>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
private $defaultOwnershipChecker;

View File

@@ -38,6 +38,9 @@ use Espo\Core\{
ORM\EntityManager,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\EmailFilter>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
private $entityManager;

View File

@@ -37,11 +37,13 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Note>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool
{
if ($entity->get('type') === 'Post' && $user->getId() === $entity->get('createdById')) {
return true;
}

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Notification>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Team>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -38,6 +38,10 @@ use Espo\Core\{
Acl\OwnershipTeamChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\User>
* @implements OwnershipTeamChecker<\Espo\Entities\User>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -30,13 +30,13 @@
namespace Espo\Classes\Acl\Webhook;
use Espo\Entities\User;
use Espo\ORM\Entity;
use Espo\Core\{
Acl\OwnershipOwnChecker,
};
use Espo\Core\Acl\OwnershipOwnChecker;
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Webhook>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Attachment>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
private const ATTR_CREATED_BY_ID = 'createdById';

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Email>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Note>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\Notification>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Acl\OwnershipOwnChecker,
};
/**
* @implements OwnershipOwnChecker<\Espo\Entities\User>
*/
class OwnershipChecker implements OwnershipOwnChecker
{
public function checkOwn(User $user, Entity $entity): bool

View File

@@ -33,10 +33,15 @@ use Espo\ORM\Entity;
use Espo\Entities\User;
/**
* @template TEntity of Entity
*/
interface AssignmentChecker
{
/**
* Check assignment.
*
* @param TEntity $entity
*/
public function check(User $user, Entity $entity): bool;
}

View File

@@ -59,6 +59,7 @@ class AssignmentCheckerFactory
/**
* Create an access checker.
*
* @return AssignmentChecker<\Espo\ORM\Entity>
* @throws NotImplemented
*/
public function create(string $scope): AssignmentChecker

View File

@@ -38,7 +38,7 @@ use Espo\Core\Acl\AssignmentChecker;
class AssignmentCheckerManager
{
/**
* @var array<string,AssignmentChecker>
* @var array<string,AssignmentChecker<Entity>>
*/
private $checkerCache = [];
@@ -58,6 +58,9 @@ class AssignmentCheckerManager
return $checker->check($user, $entity);
}
/**
* @return AssignmentChecker<Entity>
*/
private function getChecker(string $entityType): AssignmentChecker
{
if (!array_key_exists($entityType, $this->checkerCache)) {

View File

@@ -47,6 +47,9 @@ use Espo\Core\{
Acl\Table,
};
/**
* @implements AssignmentChecker<CoreEntity>
*/
class DefaultAssignmentChecker implements AssignmentChecker
{
protected const FIELD_ASSIGNED_USERS = 'assignedUsers';

View File

@@ -35,6 +35,9 @@ use Espo\Entities\User;
/**
* A default implementation for ownership checking.
*
* @implements OwnershipOwnChecker<CoreEntity>
* @implements OwnershipTeamChecker<CoreEntity>
*/
class DefaultOwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{

View File

@@ -29,7 +29,4 @@
namespace Espo\Core\Acl;
interface OwnershipChecker
{
}
interface OwnershipChecker {}

View File

@@ -30,13 +30,17 @@
namespace Espo\Core\Acl;
use Espo\ORM\Entity;
use Espo\Entities\User;
/**
* @template TEntity of Entity
*/
interface OwnershipOwnChecker extends OwnershipChecker
{
/**
* Check whether a user is an owner of an entity.
*
* @param TEntity $entity
*/
public function checkOwn(User $user, Entity $entity): bool;
}

View File

@@ -30,13 +30,17 @@
namespace Espo\Core\Acl;
use Espo\ORM\Entity;
use Espo\Entities\User;
/**
* @template TEntity of Entity
*/
interface OwnershipTeamChecker extends OwnershipChecker
{
/**
* Check whether an entity belongs to a user team.
*
* @param TEntity $entity
*/
public function checkTeam(User $user, Entity $entity): bool;
}

View File

@@ -43,12 +43,15 @@ use Espo\Core\{
/**
* A default implementation for ownership checking for portal.
*
* @implements OwnershipOwnChecker<\Espo\Core\ORM\Entity>
* @implements OwnershipAccountChecker<\Espo\Core\ORM\Entity>
* @implements OwnershipContactChecker<\Espo\Core\ORM\Entity>
*/
class DefaultOwnershipChecker implements
OwnershipOwnChecker,
OwnershipAccountChecker,
OwnershipContactChecker
{
private const ENTITY_ACCOUNT = 'Account';

View File

@@ -30,15 +30,19 @@
namespace Espo\Core\Portal\Acl;
use Espo\ORM\Entity;
use Espo\Entities\User;
use Espo\Core\Acl\OwnershipChecker;
/**
* @template TEntity of Entity
*/
interface OwnershipAccountChecker extends OwnershipChecker
{
/**
* Check whether an entity belongs to a portal user account.
*
* @param TEntity $entity
*/
public function checkAccount(User $user, Entity $entity): bool;
}

View File

@@ -30,15 +30,19 @@
namespace Espo\Core\Portal\Acl;
use Espo\ORM\Entity;
use Espo\Entities\User;
use Espo\Core\Acl\OwnershipChecker;
/**
* @template TEntity of Entity
*/
interface OwnershipContactChecker extends OwnershipChecker
{
/**
* Check whether an entity belongs to a portal user contact.
*
* @param TEntity $entity
*/
public function checkContact(User $user, Entity $entity): bool;
}

View File

@@ -40,6 +40,10 @@ use Espo\Core\{
ORM\EntityManager,
};
/**
* @implements OwnershipOwnChecker<\Espo\Modules\Crm\Entities\CampaignLogRecord>
* @implements OwnershipTeamChecker<\Espo\Modules\Crm\Entities\CampaignLogRecord>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
private $aclManager;

View File

@@ -40,6 +40,10 @@ use Espo\Core\{
ORM\EntityManager,
};
/**
* @implements OwnershipOwnChecker<\Espo\Modules\Crm\Entities\CampaignTrackingUrl>
* @implements OwnershipTeamChecker<\Espo\Modules\Crm\Entities\CampaignTrackingUrl>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
private $aclManager;

View File

@@ -40,6 +40,10 @@ use Espo\Core\{
ORM\EntityManager,
};
/**
* @implements OwnershipOwnChecker<\Espo\Modules\Crm\Entities\MassEmail>
* @implements OwnershipTeamChecker<\Espo\Modules\Crm\Entities\MassEmail>
*/
class OwnershipChecker implements OwnershipOwnChecker, OwnershipTeamChecker
{
private $aclManager;

View File

@@ -37,6 +37,9 @@ use Espo\Core\{
Portal\Acl\OwnershipAccountChecker,
};
/**
* @implements OwnershipAccountChecker<\Espo\Modules\Crm\Entities\Account>
*/
class OwnershipChecker implements OwnershipAccountChecker
{
public function checkAccount(User $user, Entity $entity): bool

View File

@@ -39,6 +39,10 @@ use Espo\Core\{
Portal\Acl\OwnershipContactChecker,
};
/**
* @implements OwnershipAccountChecker<\Espo\Modules\Crm\Entities\Contact>
* @implements OwnershipContactChecker<\Espo\Modules\Crm\Entities\Contact>
*/
class OwnershipChecker implements OwnershipAccountChecker, OwnershipContactChecker
{
private $defaultOwnershipChecker;