123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- <?php
- /**
- * FecShop file.
- *
- * @link http://www.fecshop.com/
- * @copyright Copyright (c) 2016 FecShop Software LLC
- * @license http://www.fecshop.com/license/
- */
- namespace fecadmin\models;
- use Yii;
- use yii\base\NotSupportedException;
- use yii\behaviors\TimestampBehavior;
- use yii\db\ActiveRecord;
- use yii\web\IdentityInterface;
- use yii\filters\RateLimitInterface;
- /**
- * User model
- *
- * @property integer $id
- * @property string $username
- * @property string $password_hash
- * @property string $password_reset_token
- * @property string $email
- * @property string $auth_key
- * @property integer $status
- * @property integer $created_at
- * @property integer $updated_at
- * @property string $password write-only password
- */
- /**
- * @author Terry Zhao <2358269014@qq.com>
- * @since 1.0
- */
- class AdminUser extends ActiveRecord implements IdentityInterface ,RateLimitInterface
- {
- const STATUS_DELETED = 10;
- const STATUS_ACTIVE = 1;
-
- # 速度控制 6秒内访问3次,注意,数组的第一个不要设置1,设置1会出问题,一定要
- #大于2,譬如下面 6秒内只能访问三次
- # 文档标注:返回允许的请求的最大数目及时间,例如,[100, 600] 表示在600秒内最多100次的API调用。
- public function getRateLimit($request, $action){
- return [6000000, 6];
- }
- # 文档标注: 返回剩余的允许的请求和相应的UNIX时间戳数 当最后一次速率限制检查时。
- public function loadAllowance($request, $action){
- //return [1,strtotime(date("Y-m-d H:i:s"))];
- //echo $this->allowance;exit;
- return [$this->allowance, $this->allowance_updated_at];
- }
- # allowance 对应user 表的allowance字段 int类型
- # allowance_updated_at 对应user allowance_updated_at int类型
- # 文档标注:保存允许剩余的请求数和当前的UNIX时间戳。
- public function saveAllowance($request, $action, $allowance, $timestamp){
- $this->allowance = $allowance;
- $this->allowance_updated_at = $timestamp;
- $this->save();
- }
-
- /**
- * @inheritdoc
- */
- # 设置 status 默认 ,以及取值的区间
- public function rules()
- {
- return [
- ['status', 'default', 'value' => self::STATUS_ACTIVE],
- ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
- ];
- }
-
-
- public function attributeLabels()
- {
- return [
- 'username' => '用户名',
- 'password_hash' => '密码',
- 'password_reset_token' => '重置密码Token',
- 'auth_key' => 'Auth Key',
- 'status' => '激活状态',
- 'email' => '邮箱地址',
- 'created_at' => '创建时间INT',
- 'updated_at' => '更新时间INT',
- //'role' => '权限',
- 'access_token ' => '访问令牌',
- 'created_at_datetime' => '创建时间',
- 'updated_at_datetime' => '更新时间',
-
- ];
- }
-
-
-
- /**
- * @inheritdoc
- */
- # 设置table
- public static function tableName()
- {
- return '{{%admin_user}}';
- }
- /**
- * @inheritdoc
- */
- public function behaviors()
- {
- return [
- TimestampBehavior::className(),
- ];
- }
-
- /**
- * @inheritdoc
- */
- # 通过id 找到identity
- public static function findIdentity($id)
- {
- return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
- }
- /**
- * @inheritdoc
- */
- # 通过access_token 找到identity
- public static function findIdentityByAccessToken($token, $type = null)
- {
- return static::findOne(['access_token' => $token, 'status' => self::STATUS_ACTIVE]);
- }
- # 生成access_token
- public function generateAccessToken()
- {
- $this->access_token = Yii::$app->security->generateRandomString();
- }
- /**
- * Finds user by username
- *
- * @param string $username
- * @return static|null
- */
- public static function findByUsername($username)
- {
- return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]);
- }
- /**
- * Finds user by password reset token
- *
- * @param string $token password reset token
- * @return static|null
- */
- # 此处是忘记密码所使用的
- public static function findByPasswordResetToken($token)
- {
- if (!static::isPasswordResetTokenValid($token)) {
- return null;
- }
- return static::findOne([
- 'password_reset_token' => $token,
- 'status' => self::STATUS_ACTIVE,
- ]);
- }
- /**
- * Finds out if password reset token is valid
- *
- * @param string $token password reset token
- * @return boolean
- */
- public static function isPasswordResetTokenValid($token)
- {
- if (empty($token)) {
- return false;
- }
- $timestamp = (int) substr($token, strrpos($token, '_') + 1);
- $expire = Yii::$app->params['user.passwordResetTokenExpire'];
- return $timestamp + $expire >= time();
- }
- /**
- * @inheritdoc
- */
- public function getId()
- {
- return $this->getPrimaryKey();
- }
- /**
- * @inheritdoc
- */
- public function getAuthKey()
- {
- return $this->auth_key;
- }
- /**
- * @inheritdoc
- */
- public function validateAuthKey($authKey)
- {
- return $this->getAuthKey() === $authKey;
- }
- /**
- * Validates password
- *
- * @param string $password password to validate
- * @return boolean if password provided is valid for current user
- */
- public function validatePassword($password)
- {
- return Yii::$app->security->validatePassword($password, $this->password_hash);
- }
- /**
- * Generates password hash from password and sets it to the model
- *
- * @param string $password
- */
- public function setPassword($password)
- {
- $this->password_hash = Yii::$app->security->generatePasswordHash($password);
- }
- /**
- * Generates "remember me" authentication key
- */
- public function generateAuthKey()
- {
- $this->auth_key = Yii::$app->security->generateRandomString();
- }
- /**
- * Generates new password reset token
- */
- public function generatePasswordResetToken()
- {
- $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
- }
- /**
- * Removes password reset token
- */
- public function removePasswordResetToken()
- {
- $this->password_reset_token = null;
- }
- }
|