от [[yii\rest\ActiveController]], что позволит вам создать полноценные RESTful API, написав минимум кода.
от [[yii\rest\ActiveController]], что позволит вам создать полноценные RESTful API, написав минимум кода.
[[yii\rest\Controller]] и [[yii\rest\ActiveController]] имеют следующие возможности, некоторые из которых
[[yii\rest\Controller]] и [[yii\rest\ActiveController]] имеют следующие возможности, некоторые из которых
будут подробно описаны в следующих нескольких разделах:
будут подробно описаны в следующих разделах:
* Проверка HTTP-метода;
* Проверка HTTP-метода;
*[Согласование содержимого и форматирование данных](rest-response-formatting.md);
*[Согласование содержимого и форматирование данных](rest-response-formatting.md);
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
[[yii\rest\ActiveController]], кроме того, предоставляет следующие возможности:
[[yii\rest\ActiveController]], кроме того, предоставляет следующие возможности:
* Набор наиболее употребительных действий: `index`, `view`, `create`, `update`, `delete`,`options`;
* Набор наиболее часто используемых действий: `index`, `view`, `create`, `update`, `delete` и`options`;
* Авторизация пользователя для запрашиваемых действия и ресурса.
* Авторизация пользователя для запрашиваемых действия и ресурса.
...
@@ -33,7 +33,7 @@
...
@@ -33,7 +33,7 @@
Создание нового действия похоже на создание действия для Web-приложения. Единственное отличие в том,
Создание нового действия похоже на создание действия для Web-приложения. Единственное отличие в том,
что в RESTful-действиях вместо рендера результата в представлении с помощью вызова метода `render()`
что в RESTful-действиях вместо рендера результата в представлении с помощью вызова метода `render()`
вы просто возвращает данные. Выполнение преобразования исходных данных в запрошенный формат ложится на
вы просто возвращаете данные. Выполнение преобразования исходных данных в запрошенный формат ложится на
[[yii\rest\Controller::serializer|сериализатор]] и [[yii\web\Response|объект ответа]].
[[yii\rest\Controller::serializer|сериализатор]] и [[yii\web\Response|объект ответа]].
Например:
Например:
...
@@ -59,8 +59,9 @@ public function actionView($id)
...
@@ -59,8 +59,9 @@ public function actionView($id)
в разделе [Ограничение частоты запросов](rest-rate-limiting.md).
в разделе [Ограничение частоты запросов](rest-rate-limiting.md).
Эти именованные фильтры объявлены в методе [[yii\rest\Controller::behaviors()|behaviors()]].
Эти именованные фильтры объявлены в методе [[yii\rest\Controller::behaviors()|behaviors()]].
Вы можете переопределить этот метод для настройки отдельных фильтров, отключения каких-то из них или для добавления ваших собственных фильтров.
Вы можете переопределить этот метод для настройки отдельных фильтров, отключения каких-либо из них или для добавления
Например, если вы хотите использовать только базовую HTTP-аутентификацию, вы можете написать такой код:
ваших собственных фильтров. Например, если вы хотите использовать только базовую HTTP-аутентификацию, вы можете
написать такой код:
```php
```php
useyii\filters\auth\HttpBasicAuth;
useyii\filters\auth\HttpBasicAuth;
...
@@ -123,8 +124,8 @@ public function prepareDataProvider()
...
@@ -123,8 +124,8 @@ public function prepareDataProvider()
### Выполнение контроля доступа <a name="performing-access-check"></a>
### Выполнение контроля доступа <a name="performing-access-check"></a>
При предоставлении ресурсов через RESTful API часто бывает нужно проверять, имеет ли текущий пользователь разрешение
При предоставлении ресурсов через RESTful API часто бывает нужно проверять, имеет ли текущий пользователь разрешение
на доступ к запрошенному ресурсу (или ресурсам) и манипуляцию им (ими). Для [[yii\rest\ActiveController]] эта задача может быть решена
на доступ к запрошенному ресурсу (или ресурсам) и манипуляцию им (или ими). Для [[yii\rest\ActiveController]] эта задача
переопределением метода [[yii\rest\ActiveController::checkAccess()|checkAccess()]] следующим образом:
может быть решена переопределением метода [[yii\rest\ActiveController::checkAccess()|checkAccess()]] следующим образом:
```php
```php
/**
/**
...
@@ -134,7 +135,7 @@ public function prepareDataProvider()
...
@@ -134,7 +135,7 @@ public function prepareDataProvider()
* право выполнения указанного действия над указанной моделью данных.
* право выполнения указанного действия над указанной моделью данных.
* Если у пользователя нет доступа, следует выбросить исключение [[ForbiddenHttpException]].
* Если у пользователя нет доступа, следует выбросить исключение [[ForbiddenHttpException]].
*
*
* @param string $action ID действия, которое надо выполнить
* @param string $action ID действия, которое надо выполнить
* @param \yii\base\Model $model модель, к которой нужно получить доступ. Если null, это означает, что модель, к которой нужно получить доступ, отсутствует.
* @param \yii\base\Model $model модель, к которой нужно получить доступ. Если null, это означает, что модель, к которой нужно получить доступ, отсутствует.
* @param array $params дополнительные параметры
* @param array $params дополнительные параметры
* @throws ForbiddenHttpException если у пользователя нет доступа
* @throws ForbiddenHttpException если у пользователя нет доступа
...
@@ -146,7 +147,7 @@ public function checkAccess($action, $model = null, $params = [])
...
@@ -146,7 +147,7 @@ public function checkAccess($action, $model = null, $params = [])
}
}
```
```
Метод `checkAccess()` будет вызван действиями по умолчанию контроллера [[yii\rest\ActiveController]]. Если вы создаете
Метод `checkAccess()` будет вызван действиями по умолчанию контроллера [[yii\rest\ActiveController]]. Если вы создаёте
новые действия и хотите в них выполнять контроль доступа, вы должны вызвать этот метод явно в своих новых действиях.
новые действия и хотите в них выполнять контроль доступа, вы должны вызвать этот метод явно в своих новых действиях.
> Подсказка: вы можете реализовать метод `checkAccess()` с помощью ["Контроля доступа на основе ролей" (RBAC)](security-authorization.md).
> Подсказка: вы можете реализовать метод `checkAccess()` с помощью ["Контроля доступа на основе ролей" (RBAC)](security-authorization.md).