Откуда берется информация о роли если в базе users нет такой колонки

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
imediasun
Сообщения: 45
Зарегистрирован: 2015.11.19, 15:46

Откуда берется информация о роли если в базе users нет такой колонки

Сообщение imediasun »

Откуда берется информация о роли если в базе users нет такой колонки
http://joxi.ru/nAykJRwiXQ7WQm

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

 public function actionIndex()
    {
        $searchModel = new UserSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel'  => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

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

public function search($params)
    {
        $query = self::find()
            ->leftJoin('consultant', 'consultant.user_id=user.id')
            ->select(['user.*', 'consultant.create_time as new_consultant']);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
        $dataProvider->getSort()->attributes['new_consultant'] = [
            'asc' => [
                'new_consultant' => SORT_ASC
            ],
            'desc' => [
                'new_consultant' => SORT_DESC
            ],
            'default' => SORT_DESC
        ];

        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->andFilterWhere([
            self::FIELD_USERNAME => $this->username,
            self::FIELD_ID => $this->id,
        ]);

        return $dataProvider;
    }

Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Откуда берется информация о роли если в базе users нет такой колонки

Сообщение Dominus »

Пользователь привязывается по id в таблице auth_assigment

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

// Получение ролей пользователя
$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($this->user->id);
Пример:

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

/**
 * @param int $userId
 * @return string
 */
public function getRoleName($userId)
    {
        $auth = Yii::$app->authManager;
        $roles = $auth->getRolesByUser($userId);
        $role = '';
        foreach ($roles as $item) {
            $role .= $item->description ? $item->description. ', ' : $item->name . ', ';
        }
        return chop($role, ' ,');
    }
    
\yii\helpers\VarDumper::dump($this->getRoleName($this->user->id), 10, 1);
или так:

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

   /**
     * @param int $userId
     * @return mixed|null
     */
    public function getRoleUser($userId)
    {
        if ($role = Yii::$app->authManager->getRolesByUser($userId))
            return ArrayHelper::getValue($role, function ($role, $defaultValue) {
                foreach ($role as $key => $value) {
                    return $value->name;
                }
                return null;
            });
        return null;
    }
   
   \yii\helpers\VarDumper::dump($this->getRoleUser($this->user->id), 10, 1); 
    
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
imediasun
Сообщения: 45
Зарегистрирован: 2015.11.19, 15:46

Re: Откуда берется информация о роли если в базе users нет такой колонки

Сообщение imediasun »

почему этого вашего текста нет в контроллере и инфа выводится?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Откуда берется информация о роли если в базе users нет такой колонки

Сообщение Dominus »

imediasun писал(а): 2017.09.15, 17:15 почему этого вашего текста нет в контроллере и инфа выводится?
Может что то подобное написано в моделе, а в виде идет вызов метода.
Обычно такие методы пишут в моделе User
И в GridView выводят что то типа:

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

//...
[
   'attribute' => 'role',
   'format' => 'raw',
   'value' => function ($data) {
        return $data->getRoleName($data->id);
   }
],
//...
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
imediasun
Сообщения: 45
Зарегистрирован: 2015.11.19, 15:46

Re: Откуда берется информация о роли если в базе users нет такой колонки

Сообщение imediasun »

Есть вот такая запись в моделе User

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

 public function getRoles()
    {
        return Yii::$app->getAuthManager()->getRolesByUser($this->id);
    }
    
Но в какой таблице хранятся данные о ролях и их привязка к пользователям, как найти
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Откуда берется информация о роли если в базе users нет такой колонки

Сообщение Dominus »

imediasun писал(а): 2017.09.15, 18:12 Есть вот такая запись в моделе User

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

 public function getRoles()
    {
        return Yii::$app->getAuthManager()->getRolesByUser($this->id);
    }
    
Но в какой таблице хранятся данные о ролях и их привязка к пользователям, как найти
Если authManager использует базу, то я написал выше где хранится привязка viewtopic.php?f=19&t=45060#p224951

Тут можно узнать подробнее
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Ответить