createUserMustChangePwd_audit_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package user
  2. import (
  3. "testing"
  4. "perms-system-server/internal/consts"
  5. "perms-system-server/internal/svc"
  6. "perms-system-server/internal/testutil"
  7. "perms-system-server/internal/testutil/ctxhelper"
  8. "perms-system-server/internal/types"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. )
  12. // ---------------------------------------------------------------------------
  13. // 覆盖目标:审计 L-1 修复 —— 管理员代填初始密码创建的用户必须把 MustChangePassword 默认为 Yes。
  14. // 修复前默认 No,使得"管理员口头下发 + 长期不改 + 口令库泄露即广义失陷"成为系统性弱点。
  15. // 本用例锚定:"req 未显式传入 mustChangePassword 时,落盘必须是 Yes"。
  16. // 因为 CreateUserReq 并不暴露 MustChangePassword 字段(没有 override 入口),该契约既是安全下限也是产品基线。
  17. // ---------------------------------------------------------------------------
  18. // TC-0818: L-1 —— 超管创建用户时,MustChangePassword 默认落盘为 Yes。
  19. func TestCreateUser_DefaultsMustChangePasswordToYes(t *testing.T) {
  20. ctx := ctxhelper.SuperAdminCtx()
  21. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  22. conn := testutil.GetTestSqlConn()
  23. username := "lcp_" + testutil.UniqueId()
  24. resp, err := NewCreateUserLogic(ctx, svcCtx).CreateUser(&types.CreateUserReq{
  25. Username: username,
  26. Password: "InitPass@123",
  27. Nickname: "初始口令校验",
  28. })
  29. require.NoError(t, err)
  30. require.NotNil(t, resp)
  31. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", resp.Id) })
  32. u, err := svcCtx.SysUserModel.FindOne(ctx, resp.Id)
  33. require.NoError(t, err)
  34. assert.Equal(t, int64(consts.MustChangePasswordYes), u.MustChangePassword,
  35. "L-1 基线:管理员代填初始密码的用户必须被强制下次登录改密,落盘为 Yes")
  36. }