%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 3.144.93.9 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/main/lib/access/ |
Upload File : |
<?php /** * Bitrix Framework * @package bitrix * @subpackage main * @copyright 2001-2021 Bitrix */ namespace Bitrix\Main\Access; use Bitrix\Main\Access\Event\Event; use Bitrix\Main\Access\Event\EventDictionary; use Bitrix\Main\Access\Exception\UnknownActionException; use Bitrix\Main\Access\User\AccessibleUser; abstract class BaseAccessController implements AccessibleController { protected const RULE_SUFFIX = 'Rule'; protected static $register = []; /* @var AccessibleUser $user */ protected $user; public static function getInstance($userId) { if (!array_key_exists($userId, static::$register)) { static::$register[static::class][$userId] = new static($userId); } return static::$register[static::class][$userId]; } public static function can($userId, string $action, $itemId = null, $params = null): bool { $userId = (int) $userId; $itemId = (int) $itemId; $controller = static::getInstance($userId); return $controller->checkByItemId($action, $itemId, $params); } public function __construct(int $userId) { $this->user = $this->loadUser($userId); } public function getUser(): AccessibleUser { return $this->user; } public function checkByItemId(string $action, int $itemId = null, $params = null): bool { $item = $this->loadItem($itemId); return $this->check($action, $item, $params); } public function check(string $action, AccessibleItem $item = null, $params = null): bool { $ruleName = $this->getRuleName($action); if (!$ruleName || !class_exists($ruleName)) { throw new UnknownActionException('Unknown action '. $action); } $event = $this->sendEvent(EventDictionary::EVENT_ON_BEFORE_CHECK, $action, $item, $params); $isAccess = $event->isAccess(); if (!is_null($isAccess)) { return $isAccess; } $isAccess = (new $ruleName($this))->execute($item, $params); $event = $this->sendEvent(EventDictionary::EVENT_ON_AFTER_CHECK, $action, $item, $params, $isAccess); $isAccess = $event->isAccess() ?? $isAccess; return $isAccess; } /** * @param AccessibleItem $item * @param array $request * [ * actionId => params * ] * @return array * [ * actionId => true|false * ] * @throws UnknownActionException */ public function batchCheck(array $request, AccessibleItem $item): array { $result = []; foreach ($request as $actionId => $params) { $result[$actionId] = $this->check($actionId, $item, $params); } return $result; } abstract protected function loadItem(int $itemId = null): ?AccessibleItem; abstract protected function loadUser(int $userId): AccessibleUser; protected function getRuleName(string $action): ?string { $action = explode('_', $action); $action = array_map(function($el) { return ucfirst(strtolower($el)); }, $action); return $this->getRuleNamespace() . implode($action) . static::RULE_SUFFIX; } protected function getRuleNamespace(): string { $class = new \ReflectionClass($this); $namespace = $class->getNamespaceName(); return $namespace.'\\'.static::RULE_SUFFIX.'\\'; } protected function sendEvent(string $eventName, string $action, AccessibleItem $item = null, $params = null, bool $isAccess = null) { $event = new Event( static::class, $eventName, [ 'user' => $this->user, 'item' => $item, 'action' => $action, 'params' => $params, 'isAccess' => $isAccess ] ); $event->send(); return $event; } }