Ver Fonte

重置密码,密码约束

liu tao há 3 anos atrás
pai
commit
a87020535f

+ 11 - 1
apps/api/admin/user/views.py

@@ -4,6 +4,7 @@ import json
 
 from django.db import transaction
 from django.contrib.auth import get_user_model
+from rest_framework.decorators import action
 from utils.permission import IsAdministrator
 from utils import response_error, response_ok
 from utils.custom_modelviewset import CustomModelViewSet
@@ -45,10 +46,19 @@ class UserViewSet(CustomModelViewSet):
             if log_count > 0 or exam_log_count > 0:
                 raise CustomError(u'该账号有使用记录,禁止删除!')
 
-            SysLog.objects.addnew(self.request.user, SysLog.DELETE, u'删除用户[%s],id=%d' % (instance.name, instance.id))
+            SysLog.objects.addnew(self.request.user, SysLog.DELETE, u'删除用户[%s],id=%d' % (instance.username, instance.id))
             instance.delete()
         return response_ok()
 
+    @action(methods=['post'], detail=True)
+    def reset_password(self, request, pk):
+        with transaction.atomic():
+            instance = self.get_object()
+            instance.set_password('111111')
+            instance.save()
+
+            SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'重置用户[%s]密码,id=%d' % (instance.username, instance.id))
+        return response_ok()
 
 class ChangePasswordView(APIView):
     permission_classes = [IsAdministrator, ]

+ 10 - 0
apps/staff/models.py

@@ -199,6 +199,11 @@ class User(AbstractBaseUser, PermissionsMixin):
             raise CustomError(u'两次输入的密码不一致, 请检查')
         if not self.check_password(old_password):
             raise CustomError(u'原密码输入错误, 请检查')
+        if len(new_password) < 6:
+            raise CustomError(u'密码长度不能少于6位字符!')
+        if new_password == self.username:
+            raise CustomError(u'密码不能和用户名相同!')
+
         self.set_password(new_password)
 
     def update_item(self, validated_data):
@@ -221,6 +226,11 @@ class User(AbstractBaseUser, PermissionsMixin):
             validated_data['password'] = self.password
             update()
         else:
+            if len(validated_data['password']) < 6:
+                raise CustomError(u'密码长度不能少于6位字符!')
+            if validated_data['password'] == validated_data['username']:
+                raise CustomError(u'密码不能和用户名相同!')
+
             update()
             self.set_password(validated_data['password'])
         self.save()

+ 5 - 0
apps/staff/serializers.py

@@ -177,6 +177,11 @@ class UserSerializer(serializers.ModelSerializer):
     def create(self, validated_data):
         if validated_data['password'].strip() == '':
             raise CustomError(u'密码不能为空!')
+        if len(validated_data['password']) < 6:
+            raise CustomError(u'密码长度不能少于6位字符!')
+        if validated_data['password'] == validated_data['username']:
+            raise CustomError(u'密码不能和用户名相同!')
+
         if 'type' in validated_data and validated_data['type'] == User.STAFF:
             user = User.objects.create_staff(validated_data['username'], validated_data['password'], name=validated_data['name'], is_active=validated_data['is_active'], department=validated_data['department'])
         else:

+ 2 - 2
uis/admin/user/edit.html

@@ -51,7 +51,7 @@
                     <label class="layui-form-label"><font color='red' size="4">*</font>密码:</label>
                     <div class="layui-input-block">
                       <input type="password" name="password" placeholder="请输入密码" autocomplete="off" class="layui-input">
-                        <div class="layui-word-aux">默认密码:1111;<br>修改信息时如果留空,则不修改密码。</div>
+                        <div class="layui-word-aux">默认密码:111111;<br>修改信息时如果留空,则不修改密码。</div>
                     </div>
                   </div>
 
@@ -120,7 +120,7 @@
         type = 'post';
     }
 
-    form.val("component-form-element", {'password':'1111'});
+    form.val("component-form-element", {'password':'111111'});
     if(editdata){
         form.val("component-form-element", editdata);
     }

+ 15 - 1
uis/admin/user/index.html

@@ -35,6 +35,9 @@
                 <div class="layui-btn-group">
                     <a class="layui-btn layui-btn-xs" lay-event="user_delete">删除</a>
                 </div>
+                <div class="layui-btn-group">
+                    <a class="layui-btn layui-btn-xs" lay-event="reset_password">重置密码</a>
+                </div>
             </script>
           </div>
         </div>
@@ -134,7 +137,7 @@
         ,{field:'type_text', title:'类型', width:90}
         ,{field:'status_text', title:'启用', width:90}
         ,{field:'online_text', title:'在线', width:90}
-        ,{width:120, align:'left',title: '操作', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+        ,{width:200, align:'left',title: '操作', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
       ,page: true
       ,height: 'full-104'
@@ -178,6 +181,17 @@
                     }
                 });
             });
+        } else if (obj.event === 'reset_password') {
+            layer.confirm('确定要重置该用户密码吗?', function (index) {
+                layer.close(index);
+                admin.req({
+                    url: '/admin/user/' + data.id + '/reset_password/'
+                    , type: 'post'
+                    , done: function (res) {
+                        table.reload('datagrid', {});
+                    }
+                });
+            });
         }
     });