mirror of
https://github.com/espocrm/espocrm.git
synced 2026-06-28 06:56:05 +00:00
acl generics
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -38,6 +38,9 @@ use Espo\Core\{
|
||||
ORM\EntityManager,
|
||||
};
|
||||
|
||||
/**
|
||||
* @implements OwnershipOwnChecker<\Espo\Entities\EmailFilter>
|
||||
*/
|
||||
class OwnershipChecker implements OwnershipOwnChecker
|
||||
{
|
||||
private $entityManager;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ class AssignmentCheckerFactory
|
||||
/**
|
||||
* Create an access checker.
|
||||
*
|
||||
* @return AssignmentChecker<\Espo\ORM\Entity>
|
||||
* @throws NotImplemented
|
||||
*/
|
||||
public function create(string $scope): AssignmentChecker
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -47,6 +47,9 @@ use Espo\Core\{
|
||||
Acl\Table,
|
||||
};
|
||||
|
||||
/**
|
||||
* @implements AssignmentChecker<CoreEntity>
|
||||
*/
|
||||
class DefaultAssignmentChecker implements AssignmentChecker
|
||||
{
|
||||
protected const FIELD_ASSIGNED_USERS = 'assignedUsers';
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -29,7 +29,4 @@
|
||||
|
||||
namespace Espo\Core\Acl;
|
||||
|
||||
interface OwnershipChecker
|
||||
{
|
||||
|
||||
}
|
||||
interface OwnershipChecker {}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user