Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

<a id="frameworks-wordpress-permissions"></a>

# WordPress: capabilities и nonce

## Коротко

Проверяйте право на действие и CSRF-защиту отдельно. Nonce не заменяет авторизацию.

## Плохо

```php
check_admin_referer('save_post');
wp_update_post($data);
```

## Хорошо

```php
if (!current_user_can('edit_post', $post_id)) {
  wp_die('Forbidden', '', ['response' => 403]);
}
check_admin_referer('save_post_' . $post_id);
$result = wp_update_post(wp_slash([
  'ID' => $post_id,
  'post_title' => $validated_title,
]), true);
if (is_wp_error($result)) {
  wp_die('Save failed', '', ['response' => 500]);
}
```

## Почему

Знание nonce не даёт права изменять произвольную запись. Проверка capability учитывает объект и текущего пользователя.

## Когда применять

WordPress, обработчик формы в админке. Форма создаёт соответствующий wp_nonce_field; `$post_id` — проверенный ID из маршрута, `$validated_title` — валидированная строка без служебных слешей. В запись передаётся тот же ID, на который проверено право; wp_slash подготавливает массив для API WordPress. Для REST используйте permission_callback и механизм аутентификации REST.

## Человек

Определяет права редакторов и разрешённые поля.

## Агент

Добавляет capability, nonce, валидацию и проверяет запрещённое редактирование.

## Пример применения

Редактор сохраняет карточку товара: сервер проверяет его право на конкретную запись, nonce этой формы и список разрешённых полей.

## Как проверить

- Пользователь без edit_post получает отказ.
- Неверный nonce отклоняется.

## Источники

- [Checking User Capabilities – Plugin Handbook](https://developer.wordpress.org/plugins/security/checking-user-capabilities/)
- [Nonces – Common APIs Handbook](https://developer.wordpress.org/apis/security/nonces/)
- [wp_update_post() – Function](https://developer.wordpress.org/reference/functions/wp_update_post/)

Уровень: Обязательно. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/frameworks/platforms/rules/wordpress-permissions.md)
