в исходниках нашел
Код: Выделить всё
/**
......
* @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(......);
лишая себя всех прелестей архитектуры
ну или иди в евент инит и пиши там
мне кажется что это решение как то выбивается из архитектуры или это нормально?