простейший менеджер авторизации

Уже исправленные репорты или принятые предложения
Ответить
rygoravich
Сообщения: 7
Зарегистрирован: 2015.08.19, 02:19

простейший менеджер авторизации

Сообщение rygoravich »

Делаю первый проект на 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 указанные в компонентах разрешения, не меняя ничего в самих компонентах.

Почему бы не добавить что-нибудь подобное в дефолтовую поставку?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: простейший менеджер авторизации

Сообщение maleks »

В User::can ту же самую логику можно закинуть.
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: простейший менеджер авторизации

Сообщение S c »

Имхо, не очень хорошо прям так к айдишникам в конфиге цепляться. Конечно можно для dev \ test \ local сред использовать некий params.loc, но все же

+ вы убиваете возможность добавлять администратора через веб интерфейс
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: простейший менеджер авторизации

Сообщение samdark »

Думаю, в коробку не стоит. А вот в заметку в личном блоге или в wiki оформить — вполне себе хорошая идея.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: простейший менеджер авторизации

Сообщение lynicidn »

хардкор у вас админы могут все, а пользователи ничего, это как гость и авторизованный
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: простейший менеджер авторизации

Сообщение S c »

Ни кого не смущает, что админа добавить можно только программно? хотяб массив для admins брать из БД (+ возможность добавлять админов разумеется)
Ответить