OSDN Git Service

Изменено меню
[invent/invent.git] / models / User.php
1 <?php
2
3 namespace app\models;
4
5 use Yii;
6 use yii\base\NotSupportedException;
7 use yii\db\ActiveRecord;
8 use yii\web\IdentityInterface;
9 use yii\helpers\Security;
10
11 /**
12  * This is the model class for table "{{%users}}".
13  *
14  * @property int $id Идентификатор записи (неизменяемое)
15  * @property string $username Имя пользователя
16  * @property string $password Пароль
17  */
18 class User extends ActiveRecord implements IdentityInterface
19 {
20     public $old_password;
21     public $new_password;
22     public $repeat_password;
23     /**
24      * {@inheritdoc}
25      */
26     public static function tableName()
27     {
28         return '{{%users}}';
29     }
30
31     /**
32      * {@inheritdoc}
33      */
34     public function rules()
35     {
36         return [
37             [[ 'old_password', 'new_password', 'repeat_password' ], 'required', 'on' => 'changePassword'],
38             [[ 'old_password' ], 'findPasswords', 'on' => 'changePassword' ],
39             [[ 'repeat_password' ], 'compare', 'compareAttribute' => 'new_password', 'on' => 'changePassword' ],
40             [[ 'username', 'password' ], 'required' ],
41             [[ 'username', 'password' ], 'string', 'max' => 128 ],
42             [[ 'username' ], 'unique' ],
43         ];
44     }
45
46     /**
47      * {@inheritdoc}
48      */
49     public function attributeLabels()
50     {
51         return [
52             'id'       => Yii::t('app', 'Identificator'),
53             'username' => Yii::t('users', 'User name'),
54             'password' => Yii::t('users', 'Password'),
55             'old_password' => Yii::t('users', 'Old password'),
56             'new_password' => Yii::t('users', 'New password'),
57             'repeat_password' => Yii::t('users', 'repeat password'),
58         ];
59     }
60
61     // Поиск пользователя по идентификатору
62     public static function findIdentity($id)
63     {
64         return static::findOne($id);
65     }
66
67     // Поиск пользователя по ключу доступа
68     public static function findIdentityByAccessToken($token, $type = NULL)
69     {
70         return static::findOne([ 'access_token' => $token ]);
71     }
72
73     // Поиск пользователя по имени
74     public static function findByUsername($username)
75     {
76         return static::findOne([ 'username' => $username ]);
77     }
78
79     // Поиск пользователя по уникальному ключу сброса пароля
80     public static function findByPasswordResetToken($token)
81     {
82         $expire = \Yii::$app->params[ 'user.passwordResetTokenExpire' ];
83         $parts = explode('_', $token);
84         $timestamp = (int) end($parts);
85         if ($timestamp + $expire < time())
86         {
87             // Время токена истекло
88             return null;
89         }
90         return static::findOne([ 'password_reset_token' => $token ]);
91     }
92
93     // Получение идентификатора пользователя
94     public function getId()
95     {
96         return $this->id;
97     }
98
99     // Получение ключа авторизации
100     public function getAuthKey()
101     {
102         return $this->auth_key;
103     }
104
105     // Проверка ключа авторизации
106     public function validateAuthKey($authKey)
107     {
108         return $this->getAuthKey() === $authKey;
109     }
110
111     public function findPasswords($attribute, $params)
112     {
113         if (! $this->validatePassword($this->old_password))
114             $this->addError($attribute, Yii::t('users', 'Old password is incorrect.'));
115     }
116
117     // Проверка пароля пользователя
118     public function validatePassword($password)
119     {
120         return Yii::$app->getSecurity()->validatePassword($password, $this->password);
121     }
122
123     // Устанока пароля пользователя
124     public function setPassword($password)
125     {
126         $this->password = Yii::$app->getSecurity()->generatePasswordHash($password);
127     }
128
129     // Создание уникального ключа авторизации
130     public function generateAuthKey()
131     {
132         $this->auth_key = Yii::$app->getSecurity()->generateRandomString();
133     }
134
135     // Создание ключа сброса пароля
136     public function generatePasswordResetToken()
137     {
138         $this->password_reset_token = utf8_encode(Yii::$app->getSecurity()->generateRandomString()) . '_' . time();
139     }
140
141     // Сброс ключа сброса пароля
142     public function removePasswordResetToken()
143     {
144         $this->password_reset_token = NULL;
145     }
146
147     // Проверка доступа
148     public static function canPermission($permission)
149     {
150         return isset(Yii::$app->authManager->getPermissionsByUser(\Yii::$app->user->getId())[$permission]);
151     }
152
153     // Перед записью генерируем для новых записей уникальный ключ
154     public function beforeSave($insert)
155     {
156         if (parent::beforeSave($insert))
157         {
158             if ($this->isNewRecord)
159             {
160                  $this->generateAuthKey();
161             }
162             return true;
163         }
164         return false;
165     }  // */
166 }