# Проверка авторизации

В некоторых случаях бывает необходимо удостовериться в том, что у пользователя, который пытается получить доступ к функциям или данным, есть необходимые права для этого. Например, расширение может предоставлять удаленный интерфейс, позволяющий управлять конфиденциальными данными. Смотрите в качестве примера “Упражнение 3. Сущности и авторизация Plesk”.

В таких случаях можно использовать метод pm_Auth::isValidCredentials().

Следующий пример показывает, как выполняется авторизация с помощью параметров доступа, полученных из заголовка запроса HTTP.

    namespace PleskExt\Example\Middleware;

    use Psr\Http\Message\ResponseInterface;
    use Psr\Http\Message\ServerRequestInterface;

    class BasicAuth
    {
        public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
        {
            if ($request->hasHeader('Authorization')) {
                list($login, $password) = $this->parseAuthorizationHeader($request->getHeaderLine('Authorization'));
                if ($login && $password) {
                    if (\pm_Auth::isValidCredentials($login, $password)) {
                        return $next($request->withAttribute('login', $login), $response);
                    }
                }
            }
            return $next($request, $response);
        }

        private static function parseAuthorizationHeader($header)
        {
            if (strpos($header, 'Basic') !== 0) {
                return [null, null];
            }
            $parsed = explode(':', base64_decode(substr($header, 6)), 2);
            if (count($parsed) < 2) {
                return [null, null];
            }
            return $parsed;
        }
    }

Вот еще один пример.