Делаю первый проект на yii2, наткнулся на интересную особенность - из коробки фильтр доступа yii поддерживает только разделение на гостей и зарегистрированных пользователей, а если этого недостаточно - то предлагает использовать rbac. В то же время огромное количество проектов требует обязательного выделения администраторов из общей массы зарегистрированных пользователей. И более того - множество из них даже не требует в принципе наличия разделения на зарегистрированных пользователей и гостей. Имхо, для таких нужд функционал rbac более чем избыточен. Пробовал бороться разными способами, и rbac настраивал, и надстройку над yii\web\User сочинял, но простое и элегантное решение пришло в конце - свой менеджер авторизации вместо rbac. Код прост до безобразия:
Код: Выделить всё
<?php
namespace app\components;
class SimpleAuthManager extends \yii\base\Component
{
public $admins = [];
public function checkAccess($userId, $permissionName, $params = [])
{
if (in_array($userId, $this->admins)) {
return true;
}
return false;
}
}
Подключаем его в конфиге приложения и там же указываем массив id пользователей, имеющих права администратора:
Код: Выделить всё
'components' => [
'authManager' => [
'class' => 'app\components\SimpleAuthManager',
'admins' => [1, 2, 5],
],
...
Заметьте, что перечисленные в конфиге пользователи имеют полные права на все, что дает возможность в компонентах указывать разные разрешения. Т.е. в случае необходимости в дальнейшем очень просто переселиться на rbac - просто поправить конфиг и добавить в rbac указанные в компонентах разрешения, не меняя ничего в самих компонентах.
Почему бы не добавить что-нибудь подобное в дефолтовую поставку?