Yii2 Access Control. Авторизація в Yii2. Частина 3

336

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. У цій статті ми з вами продовжимо працювати з фільтром контролю доступу – Yii2 Access Control Filter (ACF). Зокрема, ми розглянемо деякі інші його властивості.

З минулої статті ми дізналися, як можна досить гнучко обмежувати доступ до конкретних контролерам або навіть конкретних дій цих контролерів. У цій статті ми підемо трохи далі і спробуємо додати деякі умови, згідно з якими ми будемо дозволяти або забороняти доступ.

Для початку познайомимося з властивістю matchCallback. Дана властивість приймаємо параметром колбек функцію і, в залежності від того, що поверне функція, доступ буде дозволений або заборонений. Якщо функція поверне true – доступ дозволений, false – заборонений. Перевіримо. Давайте відкриємо доступ для авторизованих користувачів до контролера Default (і до всіх інших контролерів, якщо такі у вас є). Ну а до контролера Test відкриємо доступ для всіх:

‘rules’ => [
[
‘allow’ => true,
‘controllers’ => [‘admin/test’],
],
[
‘controllers’ => [‘admin/default’],
‘allow’ => true,
‘roles’ => [‘@’],
],
],

Yii2 Access Control. Авторизація в Yii2. Частина 3

Тепер неавторизовані користувачі мають доступ до всіх дій контролера Test. Допишемо callback функцію, яка для початку просто поверне false:

[
‘allow’ => true,
‘controllers’ => [‘admin/test’],
‘matchCallback’ => function($rule, $action){
return false;
}
],

Після цього доступ до контролера буде закритий навіть для авторизованих користувачів.

Yii2 Access Control. Авторизація в Yii2. Частина 3

Відповідно, якщо функція поверне true – доступ буде наданий. Цим можна скористатися, організовуючи всілякі перевірки. Візьмемо приклад з документації і відкриємо доступ, якщо сьогодні певна дата:

[
‘allow’ => true,
‘controllers’ => [‘admin/test’],
‘matchCallback’ => function($rule, $action){
return date(‘d-m’) === ’23-06′;
}
],

Якщо сьогодні, 23 червня, тоді поточний виклик функції date() поверне true і параметр matchCallback також отримає true – доступ буде відкритий. Ми можемо організувати і більш корисні перевірки. Наприклад, можемо реалізувати найпростішу систему ролей: гість, користувач, адміністратор. В даному параметрі нам буде достатньо перевірити роль авторизованого користувача і, якщо це не admin – повернути false.

Ще однією корисною можливістю буде обмеження доступу по IP, для цього ми можемо звернутися до параметру ips. Давайте відкриємо доступ до всієї адмінці тільки для локального IP:

[
‘allow’ => true,
‘roles’ => [‘@’],
‘ips’ => [‘127.0.0.1’],
],

Після цього доступ буде відкритий тільки для вказаної адреси IP, всі інші побачать вже знайому картину:

Yii2 Access Control. Авторизація в Yii2. Частина 3

Таким чином, можливостей Access Control Filter цілком буде достатньо для організації простої системи ролей на сайті. А на сьогодні все. Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.