> For the complete documentation index, see [llms.txt](https://docs.johncms.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.johncms.com/10.0/polzovateli/rabota-s-tekushim-avtorizovannym-polzovatelem.md).

# Работа с текущим авторизованным пользователем

Часто возникает необходимость получить данные пользователя который в данный момент находится на сайте и в зависимости от его свойств показать какую-либо информацию ему или наоборот скрыть.

Текущего пользователя отдаёт сервис `Johncms\Auth\CurrentUser`. Запрашивайте его через конструктор, а `di()` используйте только там, где конструктора нет:

```php
public function __construct(
    private readonly \Johncms\Auth\CurrentUser $currentUser,
) {
}
```

Сервис отвечает на вопросы о том, кто пришёл: `id()` — идентификатор (у гостя `0`), `isGuest()`, `isValid()` — авторизован и подтверждён.

### Проверка авторизации пользователя

```php
if ($this->currentUser->isValid()) {
    echo 'Пользователь авторизован. Его логин: ' . $this->currentUser->user()->name;
} else {
    echo 'Пользователь не авторизован';
}
```

### Профиль пользователя

Поля профиля (логин, настройки, счётчики) живут в модели, до которой ведёт метод `user()`:

```php
$user = $this->currentUser->user();
```

Модель загружается запросом при первом обращении, поэтому страница, которой профиль не нужен, за него не платит. У гостя `user()` возвращает пустую модель со значениями по умолчанию. Доступные свойства описаны в разделе [Поля и свойства пользователей](/10.0/polzovateli/polya-svoistva-polzovatelei.md).

### Проверка прав доступа

Должность больше не число: что посетителю можно, решают права его ролей.

```php
$accessChecker = di(\Johncms\Auth\Authorization\AccessCheckerInterface::class);

if ($accessChecker->allows(\Johncms\Auth\Authorization\CorePermissions::ADMIN_ACCESS)) {
    echo 'Пользователь может открыть админку';
}
```

В своём коде запрашивайте `AccessCheckerInterface` через конструктор, а не через `di()`. Подробно — в разделе [Права доступа](/10.0/moduli/prava-dostupa.md).

Мы рассмотрели несколько частых примеров работы с текущим пользователем. По аналогии с этими примерами, вы можете использовать другие свойства пользователя и выводить их значения или же в зависимости от значений выводить или скрывать какую-либо информацию.
