feat: simplify Sense password policy (#42)

This commit is contained in:
QiuSW
2026-08-13 09:14:14 +08:00
parent 5e6b5fa0d9
commit 8091fbb89c
3 changed files with 5 additions and 21 deletions
+1 -15
View File
@@ -2,28 +2,14 @@ package identity
import (
"fmt"
"strings"
"unicode"
"golang.org/x/crypto/bcrypt"
)
func ValidatePassword(username, password string) error {
func ValidatePassword(_ string, password string) error {
if len([]rune(password)) < 6 {
return fmt.Errorf("密码至少需要 6 个字符")
}
var upper, lower, digit bool
for _, value := range password {
upper = upper || unicode.IsUpper(value)
lower = lower || unicode.IsLower(value)
digit = digit || unicode.IsDigit(value)
}
if !upper || !lower || !digit {
return fmt.Errorf("密码必须同时包含大写字母、小写字母和数字")
}
if username != "" && strings.Contains(strings.ToLower(password), strings.ToLower(username)) {
return fmt.Errorf("密码不能包含用户名")
}
return nil
}
@@ -12,12 +12,10 @@ func TestValidatePasswordLengthAndComplexity(t *testing.T) {
password string
want string
}{
{name: "six characters", username: "operator", password: "Abc123"},
{name: "six lowercase characters", username: "operator", password: "abcdef"},
{name: "contains username", username: "admin", password: "admin123"},
{name: "six unicode characters", username: "operator", password: "密码密码密码"},
{name: "five characters", username: "operator", password: "Ab123", want: "至少需要 6 个字符"},
{name: "missing uppercase", username: "operator", password: "abc123", want: "大写字母、小写字母和数字"},
{name: "missing lowercase", username: "operator", password: "ABC123", want: "大写字母、小写字母和数字"},
{name: "missing digit", username: "operator", password: "Abcdef", want: "大写字母、小写字母和数字"},
{name: "contains username", username: "admin", password: "MyAdmin1", want: "不能包含用户名"},
}
for _, test := range tests {
+1 -1
View File
@@ -30,7 +30,7 @@
<el-form-item label="用户名" prop="username"><el-input v-model="form.username" :disabled="Boolean(editingID)" /></el-form-item>
<el-form-item label="姓名" prop="display_name"><el-input v-model="form.display_name" /></el-form-item>
<el-form-item label="角色" prop="role"><el-select v-model="form.role" style="width: 100%"><el-option v-for="role in roles" :key="role.value" :label="role.label" :value="role.value" /></el-select></el-form-item>
<el-form-item v-if="!editingID" label="初始密码" prop="password"><el-input v-model="form.password" type="password" show-password /><div class="field-hint">至少 6 位,包含大小写字母和数字,且不含用户名。</div></el-form-item>
<el-form-item v-if="!editingID" label="初始密码" prop="password"><el-input v-model="form.password" type="password" show-password /><div class="field-hint">至少 6 位字符。</div></el-form-item>
<el-form-item v-else label="状态"><el-switch v-model="form.enabled" active-text="启用" inactive-text="停用" /></el-form-item>
</el-form>
<template #footer><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" :loading="saving" @click="save">保存</el-button></template>