chat_user.py 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎虎
  5. @file: user.py
  6. @date:2025/4/14 10:20
  7. @desc:
  8. """
  9. import uuid_utils.compat as uuid
  10. from django.db import models
  11. from common.constants.permission_constants import Group
  12. class ChatUser(models.Model):
  13. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  14. email = models.EmailField(null=True, blank=True, verbose_name="邮箱", db_index=True)
  15. phone = models.CharField(max_length=20, verbose_name="电话", default="")
  16. nick_name = models.CharField(max_length=150, verbose_name="昵称", unique=True, db_index=True)
  17. username = models.CharField(max_length=150, unique=True, verbose_name="用户名", db_index=True)
  18. password = models.CharField(max_length=150, verbose_name="密码")
  19. source = models.CharField(max_length=10, verbose_name="来源", default="LOCAL", db_index=True)
  20. is_active = models.BooleanField(default=True, db_index=True)
  21. create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True, null=True, db_index=True)
  22. update_time = models.DateTimeField(verbose_name="修改时间", auto_now=True, null=True, db_index=True)
  23. USERNAME_FIELD = 'username'
  24. REQUIRED_FIELDS = []
  25. class Meta:
  26. db_table = "chat_user"
  27. class UserGroup(models.Model):
  28. id = models.CharField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  29. name = models.CharField(max_length=150, verbose_name="名称", unique=True, db_index=True)
  30. class Meta:
  31. db_table = "user_group"
  32. class UserGroupRelation(models.Model):
  33. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  34. user = models.ForeignKey(ChatUser, on_delete=models.CASCADE, verbose_name="用户")
  35. group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, verbose_name="用户组")
  36. class Meta:
  37. db_table = "user_group_relation"
  38. class ResourceType(models.TextChoices):
  39. """资源类型"""
  40. KNOWLEDGE = Group.KNOWLEDGE.value, '知识库'
  41. APPLICATION = Group.APPLICATION.value, '应用'
  42. class ResourceChatUserAuthorize(models.Model):
  43. """
  44. 资源对话用户授权表
  45. """
  46. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  47. workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True,
  48. null=True)
  49. user_group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, verbose_name="用户组")
  50. user = models.ForeignKey(ChatUser, on_delete=models.CASCADE, verbose_name="用户")
  51. resource_id = models.UUIDField(max_length=128, verbose_name="资源id", db_index=True)
  52. resource_type = models.CharField(verbose_name="资源类型", choices=ResourceType.choices, db_index=True)
  53. is_auth = models.BooleanField(verbose_name="是否授权")
  54. class Meta:
  55. db_table = "resource_chat_user_authorize"
  56. unique_together = ('user_group_id', 'resource_type', 'resource_id', 'user_id')
  57. class ResourceChatUserGroupAuthorize(models.Model):
  58. """
  59. 资源对话用户组授权表
  60. """
  61. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  62. workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True,
  63. null=True)
  64. user_group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, verbose_name="用户组")
  65. resource_id = models.UUIDField(max_length=128, verbose_name="资源id", db_index=True)
  66. resource_type = models.CharField(verbose_name="资源类型", choices=ResourceType.choices, db_index=True)
  67. is_auth = models.BooleanField(verbose_name="是否授权")
  68. class Meta:
  69. db_table = "resource_chat_user_group_authorize"
  70. unique_together = ('user_group_id', 'resource_type', 'resource_id')