. * * 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\Map; use Espo\Core\Utils\Metadata; class MetadataProvider { protected string $type = 'acl'; public function __construct(private Metadata $metadata) {} /** * @return string[] */ public function getScopeList(): array { /** @var string[] */ return array_keys($this->metadata->get('scopes') ?? []); } public function isScopeEntity(string $scope): bool { return (bool) $this->metadata->get(['scopes', $scope, 'entity']); } /** * @return string[] */ public function getScopeFieldList(string $scope): array { /** @var string[] */ return array_keys($this->metadata->get(['entityDefs', $scope, 'fields']) ?? []); } /** * @return array */ public function getPermissionList(): array { $itemList = $this->metadata->get(['app', $this->type, 'valuePermissionList']) ?? []; return array_map( function (string $item): string { if (str_ends_with($item, 'Permission')) { return substr($item, 0, -10); } return $item; }, $itemList ); } }