getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Не относящиеся к фреймворку и программированию вопросы
sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.09.30, 03:16

Всем доброго времени суток

в исходниках нашел

Код: Выделить всё

     /**
     ......
     * @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead.
     */
    protected function getAuthManager()
    {
        return Yii::$app->getAuthManager();
    }
    
    /**
     * Returns the access checker used for checking access.
     * @return CheckAccessInterface
     * @since 2.0.9
     */
    protected function getAccessChecker()
    {
        return $this->accessChecker !== null ? $this->accessChecker : $this->getAuthManager();
    }

и очень было обрадовался, и не откладывая в долгий ящик решил сделать по новому.... но......

проблема в том что $this->getAuthManager() возвращает объект .... а..... $this->accessChecker - это публичное свойство (в анотации тип не определен) ... смотрим метод can

Код: Выделить всё

    public function can($permissionName, $params = [], $allowCaching = true)
    {
        ......
        if (($accessChecker = $this->getAccessChecker()) === null) {
            return false;
        }
        $access = $accessChecker->checkAccess($this->getId(), $permissionName, $params);
       .........
    }

как видим.... $this->getAccessChecker() так же должна возвращать объект, теперь делаем логичное заключение, что $this->accessChecker должно содержать объект, а не чтото еще

т.е. получается, что либо в конфиге приложения не положись в это свойство строку/массив, либо в конфиге надо писать чтото типа

'accessChecker' => new accessCheckerClass(......);

лишая себя всех прелестей архитектуры

ну или иди в евент инит и пиши там


мне кажется что это решение как то выбивается из архитектуры или это нормально?

Аватара пользователя
ElisDN
Сообщения: 5015
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение ElisDN » 2017.09.30, 06:23

sm-vasya писал(а):
2017.09.30, 03:16
$this->accessChecker - это публичное свойство (в анотации тип не определен) ...
В анотации тип @var CheckAccessInterface
sm-vasya писал(а):
2017.09.30, 03:16
получается, что либо в конфиге приложения не положись в это свойство строку/массив
Можно передать Instance::of('строка или массив') через Yii::$container.

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.09.30, 13:24

ElisDN писал(а):
2017.09.30, 06:23
В анотации тип @var CheckAccessInterface
да, но.
это не отвечает на вопрос что тут должен быть объект или строка/массив. (строка/массив могут указывать на то что здесь содержится объект CheckAccessInterface), ибо традиционно в Yii геттер достаточно интелектуален, и если это строка/массив, то он превращает (по крайней мере пытается) его в объект

ElisDN писал(а):
2017.09.30, 06:23
Можно передать Instance::of('строка или массив') через Yii::$container.
да, но.
1. это опять не перечеркивает тех недостатков которые я описал
2. получается что один объект (yii\web\User) я должен настраивать в 2-х разных местах (пусть и в одном файле даже) что не очень сразу понятно читателю конфига

я не утверждаю что "все пропало, ничего не сделать", я утверждаю что данное решение архитектурно выглядит не соответствующе базовым.

конечно же я могу обернуть это в свой класс и переопределить геттер, но мне не понятно - это такое решение и останется на всегда, или это все таки случайность

Аватара пользователя
ElisDN
Сообщения: 5015
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение ElisDN » 2017.09.30, 13:49

sm-vasya писал(а):
2017.09.30, 13:24
это не отвечает на вопрос что тут должен быть объект или строка/массив.
Да, здесь не вызывается Instance::ensure() в методе init() или в сеттере, поэтому можно передавать только объект.
sm-vasya писал(а):
2017.09.30, 13:24
это опять не перечеркивает тех недостатков которые я описал... один объект я должен настраивать в 2-х разных местах... я утверждаю что данное решение архитектурно выглядит не соответствующе базовым.
Это неудобно только в Yii, где есть четыре разных места для конфигов. В других фреймворках обычно конфиг всего один.

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.09.30, 14:02

ElisDN писал(а):
2017.09.30, 13:49
Это неудобно только в Yii, где есть четыре разных места для конфигов. В других фреймворках обычно конфиг всего один.
не согласен.

1. то что в Yii 4 или 18 мест для конфигурирования - это плюс, ибо дает гибкость, а не минус. а то что некоторые не правильно это используют - это их личные проблемы. опять же вот именно такое решение (см. выше) способствует таким проблемам.

2. мы же тут говорим вроде про Yii а не про другие фреймворки

3. ну и собственно что Вы хотите этим сказать? "вся жизнь фигня, придется жить с тем что есть" ?

Аватара пользователя
maleks
Сообщения: 1643
Зарегистрирован: 2012.12.26, 12:56

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение maleks » 2017.09.30, 14:31

Я так сходу и не понял как в этом случае через конфиг у компонента передать ему объект (без new Класс; в конфиге конечно). Instance::of только для di подставит.
sm-vasya писал(а):3. ну и собственно что Вы хотите этим сказать? "вся жизнь фигня, придется жить с тем что есть" ?
сюда не заходили? :)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение zelenin » 2017.09.30, 15:02

sm-vasya писал(а):
2017.09.30, 14:02
ElisDN писал(а):
2017.09.30, 13:49
Это неудобно только в Yii, где есть четыре разных места для конфигов. В других фреймворках обычно конфиг всего один.
не согласен.

1. то что в Yii 4 или 18 мест для конфигурирования - это плюс, ибо дает гибкость, а не минус
гибкость - это когда дают интерфейс, который ты можешь реализовать как угодно.
когда тебе дают несколько точек входа для конфига - это бардак и ад для отладки.
sm-vasya писал(а):
2017.09.30, 14:02
а то что некоторые не правильно это используют - это их личные проблемы
то, что фреймворк дает шанс ошибиться - не есть хорошо. а учитывая уровень среднего yii-шника, и вообще зло.

Аватара пользователя
ElisDN
Сообщения: 5015
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение ElisDN » 2017.09.30, 15:43

sm-vasya писал(а):
2017.09.30, 14:02
не согласен.
С чем не согласны?

Было бы только конфигурировние одного контейнера без сервис-локатора, тогда бы никаких строк/массивов не пригодилось. Вписывали бы эти строки/массивы прямо в Instance::of:

Код: Выделить всё

'singletons' => [
    'authManager' => [
        'class' => 'yii\rbac\DbManager',
    ],
    'user' => [
        'class' => 'yii\web\User',
        'enableAutoLogin' => true,
        'accessChecker' => Instance::of('authManager'),
    ],
    'yii\mail\MailerInterface' => [
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => Instance::of([
            'class' => 'Swift_Transport',
            'username' => env('MAILER_USERNAME'),
        ]),
    ],
]
и такой "умный" конфиг преобразовывал бы это на лету в объекты и вкладывал бы их друг в друга. Без необходимости загаживать код сеттеров и методов init() во всех компонентах.

Все бы пользовались единым удобным конфигом вместо четырёх

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.09.30, 22:07

maleks писал(а):
2017.09.30, 14:31
sm-vasya писал(а):3. ну и собственно что Вы хотите этим сказать? "вся жизнь фигня, придется жить с тем что есть" ?
сюда не заходили? :)
Извините /мою педантичность/ пардон, мое тугодумие, но что вы хотите этим сказать?

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.09.30, 22:15

zelenin писал(а):
2017.09.30, 15:02

гибкость - это когда дают интерфейс, который ты можешь реализовать как угодно.
когда тебе дают несколько точек входа для конфига - это бардак и ад для отладки.

то, что фреймворк дает шанс ошибиться - не есть хорошо. а учитывая уровень среднего yii-шника, и вообще зло.
когда у меня есть 7654 мест где я могу войти - это гибко, когда мне дают только 1 место - я посылаю на .... прихоилось разбираться в чужих проектах и после среднего, и после сильного, и даже после слабого, никакого ада не встречалось. знание архитектуры - позволяет сразу сделать предположения где и что может быть, остается только все гипотезы проверить.

а где связь между "787566 точек входа" и "фремворк дает шанс ошибится" ?

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.09.30, 22:24

ElisDN писал(а):
2017.09.30, 15:43
sm-vasya писал(а):
2017.09.30, 14:02
не согласен.
С чем не согласны?
так написал же с чем.
ElisDN писал(а):
2017.09.30, 15:43
Было бы только конфигурировние одного контейнера без сервис-локатора, тогда бы никаких строк/массивов не пригодилось. Вписывали бы эти строки/массивы прямо в Instance::of:

Код: Выделить всё

'singletons' => [
    'authManager' => [
        'class' => 'yii\rbac\DbManager',
    ],
    'user' => [
        'class' => 'yii\web\User',
        'enableAutoLogin' => true,
        'accessChecker' => Instance::of('authManager'),
    ],
    'yii\mail\MailerInterface' => [
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => Instance::of([
            'class' => 'Swift_Transport',
            'username' => env('MAILER_USERNAME'),
        ]),
    ],
]
и такой "умный" конфиг преобразовывал бы это на лету в объекты и вкладывал бы их друг в друга. Без необходимости загаживать код сеттеров и методов init() во всех компонентах.

Все бы пользовались единым удобным конфигом вместо четырёх
ага, а еще б такой конфиг проинициализировал бы сразу все объекты, и которые надо и которые на надо. класс.

для справки. не всегда нужно все объекты создавать. и от того что они лежат в виде строки или массива гораздо лучше и для быстродействия и для потребляемых ресурсов.

но это уже перерастает в холивар, коим не имею возможности заниматься. я спросил по делу и без претензий, а вы мне "и то и другое хрень, жизнь фигня, смирись или юзай симфони". пс. на симфони у меня разработчики на каждый чих и пых изобретают костыль, а на таком вот "дибильном" yii я делаю раз в 10 быстрей на стандартной архитектуре.

Аватара пользователя
ElisDN
Сообщения: 5015
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение ElisDN » 2017.10.01, 09:08

sm-vasya писал(а):
2017.09.30, 22:24
ага, а еще б такой конфиг проинициализировал бы сразу все объекты, и которые надо и которые не надо. класс.

для справки. не всегда нужно все объекты создавать. и от того что они лежат в виде строки или массива гораздо лучше и для быстродействия и для потребляемых ресурсов.
А вот и не "ага". Вы даже не в курсе, что Instance::of в отличие от Instance::ensure инициализирует объекты не сразу, а только при вызове get. О чём тогда спорить?

Аватара пользователя
maleks
Сообщения: 1643
Зарегистрирован: 2012.12.26, 12:56

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение maleks » 2017.10.01, 13:57

sm-vasya писал(а):
2017.09.30, 22:07
maleks писал(а):
2017.09.30, 14:31
sm-vasya писал(а):3. ну и собственно что Вы хотите этим сказать? "вся жизнь фигня, придется жить с тем что есть" ?
сюда не заходили? :)
Извините /мою педантичность/ пардон, мое тугодумие, но что вы хотите этим сказать?
Если та тема не прояснила для вас их(нескольких старожил этого форума) резко негативное отношение к текущей версии Yii2, то вам будет и в дальнейшем сложно понимать о чем они говорят, а уж тем более спорить. Они будут с вами спорить о том какой фреймворк плохой, как будто вы разрабатывали его архитектуру.

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.10.01, 16:17

ElisDN писал(а):
2017.10.01, 09:08
инициализирует объекты не сразу, а только при вызове get. О чём тогда спорить?
ню ню.... действительно....
....о чем и с кем тут спорить...
Последний раз редактировалось sm-vasya 2017.10.01, 16:18, всего редактировалось 1 раз.

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.10.01, 16:18

maleks писал(а):
2017.10.01, 13:57

Если та тема не прояснила для вас их(нескольких старожил этого форума) резко негативное отношение к текущей версии Yii2, то вам будет и в дальнейшем сложно понимать о чем они говорят, а уж тем более спорить. Они будут с вами спорить о том какой фреймворк плохой, как будто вы разрабатывали его архитектуру.
спасибо большое, (без ироний и сарказма), действительно познавательно. я кстати там отписался.

Аватара пользователя
maleks
Сообщения: 1643
Зарегистрирован: 2012.12.26, 12:56

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение maleks » 2017.10.01, 16:27

sm-vasya писал(а):
2017.10.01, 16:17
ElisDN писал(а):
2017.10.01, 09:08
инициализирует объекты не сразу, а только при вызове get. О чём тогда спорить?
ню ню.... действительно....
....о чем и с кем тут спорить...
Не, ну насчет особенностей работы DI он по теме то отписался.
Просто наличие 2-ух ServiceLocator и DI изначально создает проблемы. Как вот в этой теме.
И если DI полностью покрывает все потребности, то почему бы не выпилить эти так называемые "компоненты" из фреймворка... Но это все большие решения, которые не знаю кто может принимать, китаец то основатель, и разработчик текущей архитектуры, бросил походу фрейм.

Аватара пользователя
ElisDN
Сообщения: 5015
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение ElisDN » 2017.10.01, 18:43

sm-vasya писал(а):
2017.10.01, 16:17
ню ню... действительно... о чем и с кем тут спорить...
Ну так ваше "ага" про инициализацию правдой не оказалось. Вот и не с чем пока спорить.

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.10.01, 20:01

ElisDN писал(а):
2017.10.01, 18:43

Ну так ваше "ага" про инициализацию правдой не оказалось. Вот и не с чем пока спорить.
да ??? кто здесь :shock: ??? кто сказал что это не правда ??? ну ка покажись

sm-vasya
Сообщения: 191
Зарегистрирован: 2015.03.04, 01:12

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение sm-vasya » 2017.10.01, 20:20

maleks писал(а):
2017.10.01, 16:27
Не, ну насчет особенностей работы DI он по теме то отписался.
Просто наличие 2-ух ServiceLocator и DI изначально создает проблемы. Как вот в этой теме.
И если DI полностью покрывает все потребности, то почему бы не выпилить эти так называемые "компоненты" из фреймворка... Но это все большие решения, которые не знаю кто может принимать, китаец то основатель, и разработчик текущей архитектуры, бросил походу фрейм.
дык ктож спорит то про это.... да есть и такое решение.... я просто еще раз обращу внимание на то что я хотел сказать - а именно что есть одна линия поведения у фреймворка которая превуалирует, а тут появилась другая, которая выбивается из общей канвы и доставляет дискомфорт. я это увидел и как сочувствующий проекту - отписался, что есть некоторое расхождение. большего вклада сделать не могу. как пойдет проект развиваться дальше - я не знаю. если проект перейдет на другую архитектуру - я обязательно ознакомлюсь и попробую разобраться как это использовать. если это будет удобно - конечно возьму на вооружение. но трындеть о том что "фся жизнь фигня, и тд" не вижу смысла. особенно смешит позиция "yii полное Г , в нем нету пср972, но зато всего за 9990 рублей я вам уныло расскажу про то как на этом г.... сделать магазин а еще за 9990 я расскажу как сделать еще и какую нибудь другую хрень, и вы сможете не имея фундаментального образования рассказывать фсем про то что вы послушали как на этом г делать все это, при этом не зная как сложить 2+2, но 2+2 уже никто не складывает, это никому не нужно, не слушайте вы эти сказки про каких то там магов и чародеев которые уверены что кроме 2+2 в этом мире ничего не существует", круто...

пс. никого лично не имею ввиду, фсе совпадения случайны

Аватара пользователя
ElisDN
Сообщения: 5015
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: getAuthManager @deprecated since version 2.0.9, to be removed in 2.1. Use [[getAccessChecker()]] instead

Сообщение ElisDN » 2017.10.01, 20:51

sm-vasya писал(а):
2017.10.01, 20:01
кто сказал что это не правда ??? ну ка покажись
Я сказал, что по делу ваше предположение об Instance::of:
sm-vasya писал(а):
2017.10.01, 20:01
ага, а еще б такой конфиг проинициализировал бы сразу все объекты, и которые надо и которые не надо. класс.
не является правдой, так как:
ElisDN писал(а):
2017.10.01, 09:08
Instance::of инициализирует объекты не сразу, а только при вызове get.
Соответственно, этот довод отметается как несостоятельный.

Любое непонимание предмета дискуссии одной из сторон не идёт на пользу диалогу, а превращает его в холивар.

Если хотите конструктивной и продуктивной беседы, то возвращайтесь в объективное предметное русло. А ваши личные обиды на Овальных с нападками про трындёж, смузи, ипотеки, хромокеи и фейсбучеги и прочие психологические травмы на узкотематическом техническом ресурсе никого не интересуют. Такой флуд подходит для более гуманитарных форумов, где эмоции превуалируют над сутью.

Ответить