UserExistenceValidator.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Module\OpenAPI\Validators;
  3. use App\Module\User\Models\User;
  4. use UCore\Validator;
  5. /**
  6. * 用户存在性验证器
  7. *
  8. * 验证用户是否存在且状态正常
  9. */
  10. class UserExistenceValidator extends Validator
  11. {
  12. /**
  13. * 验证用户存在性
  14. *
  15. * @param mixed $value 要验证的用户ID
  16. * @param array $data 完整的数据数组
  17. * @return bool
  18. */
  19. public function validate(mixed $value, array $data): bool
  20. {
  21. // 检查用户ID是否为有效的整数
  22. if (!is_numeric($value) || (int)$value <= 0) {
  23. $this->addError('用户ID必须为正整数');
  24. return false;
  25. }
  26. $userId = (int)$value;
  27. // 查找用户
  28. $user = User::find($userId);
  29. if (!$user) {
  30. $this->addError('用户不存在');
  31. return false;
  32. }
  33. // 检查用户状态
  34. if (!$this->isUserActive($user)) {
  35. $this->addError('用户状态异常,无法进行操作');
  36. return false;
  37. }
  38. // 将用户对象设置到验证对象中
  39. if (isset($this->args['user'])) {
  40. $this->validation->user = $user;
  41. }
  42. return true;
  43. }
  44. /**
  45. * 检查用户是否为活跃状态
  46. *
  47. * @param User $user 用户对象
  48. * @return bool
  49. */
  50. private function isUserActive(User $user): bool
  51. {
  52. // 检查用户状态字段
  53. // 假设 status = 1 表示正常状态
  54. if (isset($user->status) && $user->status != 1) {
  55. return false;
  56. }
  57. // 检查用户是否被删除
  58. if (isset($user->deleted_at) && $user->deleted_at !== null) {
  59. return false;
  60. }
  61. // 可以添加更多的状态检查逻辑
  62. // 例如:检查用户是否被封禁、是否需要验证等
  63. return true;
  64. }
  65. /**
  66. * 获取验证器描述
  67. *
  68. * @return string
  69. */
  70. public function getDescription(): string
  71. {
  72. return '验证用户是否存在且状态正常,确保可以进行资金操作';
  73. }
  74. }