CakePHP 3 - проверить переменную из контроллера в модели - PullRequest
0 голосов
/ 11 октября 2019

Я новичок в CakePHP, и мне нужна помощь с этим сейчас.

В приложении у меня есть эта переменная, доступная из контроллеров.

$this->Auth->user('is_admin')

Мне нужен фильтр для всех Находок в модели. Так что в ContactsTable.php у меня есть это

public function beforeFind($event, $query, $options) {  
  $alias = $event->subject()->alias();
  $query->where([$alias.'.deleted is null']);
  return $query;
}

Теперь мне нужно применить это "где" только для пользователей без администраторов. Итак, мой вопрос, как я могу прочитать $this->Auth->user('is_admin') в этой модели?

Спасибо

1 Ответ

1 голос
/ 13 октября 2019

1) Вы можете передать auth cariable как param в finder:

//controller 
$result = $this
    ->Users
    ->find('myCustomFinder' , [
        'is_admin' => $this->Auth->user('is_admin')
    ]);

2) Или Вы можете получить доступ к переменным сеанса непосредственно в модели, но это не очень хорошая практика, и это немного сложнеепроверить.

// model
public function beforeFind($event, $query, $options) 
{  
    $is_admin = \Cake\Routing\Router::getRequest()
        ->session()
        ->read('Auth.User.is_admin');

    // edit: 
    if($is_admin) {
       return $query->withAdminStuff();
    }

    return $query->nonAdminStuff();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...