. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Acl\AccessChecker; use Espo\Core\Acl\ScopeData; use Espo\Core\Acl\Table; /** * Checks scope access. */ class ScopeChecker { public function __construct() {} public function check(ScopeData $data, ?string $action = null, ?ScopeCheckerData $checkerData = null): bool { if ($data->isFalse()) { return false; } if ($data->isTrue()) { return true; } if ($action === null) { return true; } $level = $data->get($action); if ($level === Table::LEVEL_ALL || $level === Table::LEVEL_YES) { return true; } if ($level === Table::LEVEL_NO) { return false; } if (!$checkerData) { return false; } if ($level === Table::LEVEL_OWN || $level === Table::LEVEL_TEAM) { if ($checkerData->isOwn()) { return true; } } if ($level === Table::LEVEL_OWN || $level === Table::LEVEL_TEAM) { if ($checkerData->isShared()) { return true; } } if ($level === Table::LEVEL_TEAM) { if ($checkerData->inTeam()) { return true; } } return false; } }