Как правильно изменить модель User (IdentityInterface) в Yii2?

В общем имеется стандартная модель User которая привязана к таблице %user, мне необходимо сделать способ авторизации через другую таблицу, не используя RBAC. Логика проста, я пробегаю по своей таблице "Subscriber"
и выбираю всех пользователей со статусом "is_subscribed" = 1.

На данный момент из того что я сделал, это создал новую модель для ввода данных со страницы авторизации.

И приходит мне только "UserName"

$model = new LoginForm;
        
 $res['model'] = $model;
        
 return $this->render('login',$res);


Вот, по логике я должен дальше передать эти данные в модель
Допустим так
if($model->load(Yii::$app->request->post() && $model->validate()){
// тут надо придумать способ передачи в модель для проверки существования пользователя
}


Моя модель на данный момент почти пустая, и выглядит примерно так
namespace common\models;


class User extends ActiveRecord implements IdentityInterface
{
      const STATUS_ACTIVE = 1;
      const STATUS_NO_ACTIVE = 0;

public static function tableName()
    {
        return '{{%subscribers}}';
    }
  public function behaviors()
    {
        return [
            TimestampBehavior::className(),
        ];
    }
public function rules()
    {
        return [
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_NO_ACTIVE]],
        ];
    }
public static function findIdentity($phone)
    {
        return static::findOne(['phone_number' => $phone, 'status' => self::STATUS_ACTIVE]);
    }
public static function findIdentityByAccessToken($token, $type = null)
    {
        throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
    }
public function getId()
    {
        return $this->getPrimaryKey();
    }

    public function getAuthKey()
    {
        return $this->auth_key;
    }

    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }
 public function generateAuthKey()
    {
        $this->auth_key = Yii::$app->security->generateRandomString();
    }
}

Вот в чем вопрос, для дальнейшей проверки, мне надо в этой же модели использовать другую таблицу, допустим "tb_subscriber_paymemt"
и там вторая часть логики на проверку оплаты пользователей, к доступу на сайт.
Каким способом можно это реализовать?
Т.е. каким способ подключить вторую таблицу для проверки, наличия оплаты у этого пользователя?
  • Вопрос задан
  • 624 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
мне необходимо сделать способ авторизации через другую таблицу, не используя RBAC

RBAC ни каким образом не влияет на авторизацию
Т.е. каким способ подключить вторую таблицу для проверки, наличия оплаты у этого пользователя?

Через обычную реляцию. В Вашем случае User это наследник стандартного ActiveRecord, просто реализующий методы определенные в интерфейсе IdentityInterface. Поэтому никто Вам не запрещает работать с классом как с обычным ActiveRecord
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы