Эх сурвалжийг харах

修改用户账号验证唯一的方法

sugangqiang 2 жил өмнө
parent
commit
5aabb8e7d8

+ 17 - 2
app/admin/validate/User.php

@@ -18,7 +18,7 @@ use think\Validate;
 class User extends Validate {
 class User extends Validate {
 
 
     protected $rule = [
     protected $rule = [
-        'account' => 'require|max:50|unique:sys_user',
+        'account' => 'require|max:50|checkUnique:sys_user',
         'name' => 'require|max:50|regex:/^[\x{4e00}-\x{9fa5}\(\)()\da-zA-Z&]{2,50}$/u',
         'name' => 'require|max:50|regex:/^[\x{4e00}-\x{9fa5}\(\)()\da-zA-Z&]{2,50}$/u',
         'type' => 'require|checkInSelect:type,1,2,3,4',
         'type' => 'require|checkInSelect:type,1,2,3,4',
         'password' => 'require|min:8|regex:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$/',
         'password' => 'require|min:8|regex:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$/',
@@ -33,7 +33,7 @@ class User extends Validate {
     protected $message = [
     protected $message = [
         'account.require' => '请填写账户!',
         'account.require' => '请填写账户!',
         'account.max' => '账户最多50个字符!',
         'account.max' => '账户最多50个字符!',
-        'account.unique' => '该账户已被注册',
+        'account.checkUnique' => '该账户已被注册',
         'name.require' => '请输入姓名',
         'name.require' => '请输入姓名',
         'name.max' => '姓名最多50个字符!',
         'name.max' => '姓名最多50个字符!',
         'name.regex' => '姓名只能是中文',
         'name.regex' => '姓名只能是中文',
@@ -57,6 +57,21 @@ class User extends Validate {
         'change_pwd' => ['old_password', 'password', "re_password"],
         'change_pwd' => ['old_password', 'password', "re_password"],
     ];
     ];
 
 
+    protected function checkUnique($value, $rule, $data = [], $field) {
+        $db = $this->db->name($rule);
+        $pk = $db->getPk();
+        $map = [];
+        $map[] = [$field, "=", $data[$field]];
+        $map[] = ["status", "<>", 3];        
+        if ($data[$pk]) {
+            $map[] = [$pk, "<>", $data[$pk]];
+        }
+        if ($db->where($map)->field($pk)->find()) {
+            return false;
+        }
+        return true;
+    }
+
     protected function checkInSelect($value, $rule, $data = []) {
     protected function checkInSelect($value, $rule, $data = []) {
         $title = "";
         $title = "";
         $select = explode(",", $rule);
         $select = explode(",", $rule);