checkSite(); $_data = self::where('username', $_post['username'])->where('site_id', $site_id)->find(); if (empty($_data)) { return send_http_status('', 40502); } if ($_data['status'] != 1) { return send_http_status('', 40503); } if (!password_verify($_post['password'], $_data['password'])) { return send_http_status('', 40504); } //登录成功写入登录信息 $this->setLoginIp($_data['id'], $site_id); return $_data->hidden(['password'])->toArray(); } /** * 用户最后登录 IP */ private function setLoginIp(int $user_id = 0, int $site_id = 0) { $_data = [ 'ip' => ip2long(request()->ip()), 'login_time' => time(), ]; $_op = $this->where('site_id', $site_id)->where('id', $user_id); return $_op->save($_data); } /** * 读取后 * @param Model $model * @return bool|void */ public static function onAfterRead(Model $model) { if (in_array(request()->action(), ['edit', 'delete', 'status'])) { return true; } $model->hidden(['password']); $model->offsetSet('ip', long2ip((int)$model->getAttr('ip'))); $model->offsetSet('sexname', config('dictionary.sqlfields.sex')[$model->getAttr('sex')]); //用户权限 $model->offsetSet('authorities', PermissAuth::getInstance()->getAuthList($model->getAttr('id'), 1, true)); //用户角色 $_roles = PermissAuth::getInstance()->getUserGroups($model->getAttr('id')); $model->offsetSet('roles', $_roles); $model->offsetSet('role_ids', implode(',', array_column($_roles, 'id'))); //省市区代码转换 $model->setAttr('province_city', [$model->getAttr('province'), $model->getAttr('city'), $model->getAttr('area')]); } /** * 新增前 * @param Model $model * @return mixed|void */ public static function onBeforeInsert(Model $model) { if (!in_array(request()->action(), ['add'])) { return true; } //密码加密 $salt_password = password_hash($model->getAttr('password'), PASSWORD_DEFAULT); $model->setAttr('password', $salt_password); } /** * 修改前 * @param Model $model * @return mixed|void */ public static function onBeforeUpdate(Model $model) { //禁止修改用户名 $model->offsetUnset('username'); $action = request()->action(); if (!in_array($action, ['edit', 'passwordEdit', 'passwordReset', 'editPersional'])) { return true; } //密码修改验证逻辑 if ($action == 'passwordEdit') { if (!password_verify($model->getData('old_password'), $model->getOrigin('password'))) { return send_http_status('', 40504); } } //密码加密 if ($action == 'passwordEdit' || $action == 'passwordReset') { $salt_password = password_hash($model->getData('password'), PASSWORD_DEFAULT); $model->setAttr('password', $salt_password); } //省市区代码拆分 $city_arr = $model->getAttr('province_city'); if (!empty($city_arr)) { $model->setAttr('province', $city_arr[0]); $model->setAttr('city', $city_arr[1]); $model->setAttr('area', $city_arr[2]); } } /** * 新增前、修改前 同时 * @param Model $model * @return mixed|void */ public static function onBeforeWrite(Model $model) { parent::onBeforeWrite($model); if (!in_array(request()->action(), ['add', 'edit'])) { return true; } //以下参数禁止新增或更改 $model->offsetUnset('ip'); } public static function onAfterWrite(Model $model) { parent::onAfterWrite($model); if (!in_array(request()->action(), ['add', 'edit'])) { return true; } //写入用户权限 $id = $model->getAttr('id') ?? $model->getAttr('copy_safe_id'); PermissAuth::getInstance()->addUserGroupAccess((int)$id, $model->getAttr('role_ids')); } }