diff --git a/apps/system_manage/models/__init__.py b/apps/system_manage/models/__init__.py index acd03f67e..de01c428b 100644 --- a/apps/system_manage/models/__init__.py +++ b/apps/system_manage/models/__init__.py @@ -9,3 +9,4 @@ from .workspace_user_permission import * from .system_setting import * from .log_management import * +from .chat_user import * \ No newline at end of file diff --git a/apps/system_manage/models/chat_user.py b/apps/system_manage/models/chat_user.py new file mode 100644 index 000000000..a65f9bc10 --- /dev/null +++ b/apps/system_manage/models/chat_user.py @@ -0,0 +1,101 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:虎虎 + @file: user.py + @date:2025/4/14 10:20 + @desc: +""" +import uuid_utils.compat as uuid +from django.db import models + +from common.constants.permission_constants import Group + + +class ChatUser(models.Model): + id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + email = models.EmailField(null=True, blank=True, verbose_name="邮箱", db_index=True) + phone = models.CharField(max_length=20, verbose_name="电话", default="") + nick_name = models.CharField(max_length=150, verbose_name="昵称", unique=True, db_index=True) + username = models.CharField(max_length=150, unique=True, verbose_name="用户名", db_index=True) + password = models.CharField(max_length=150, verbose_name="密码") + source = models.CharField(max_length=10, verbose_name="来源", default="LOCAL", db_index=True) + is_active = models.BooleanField(default=True, db_index=True) + create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True, null=True, db_index=True) + update_time = models.DateTimeField(verbose_name="修改时间", auto_now=True, null=True, db_index=True) + + USERNAME_FIELD = 'username' + REQUIRED_FIELDS = [] + + class Meta: + db_table = "chat_user" + + +class UserGroup(models.Model): + id = models.CharField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + name = models.CharField(max_length=150, verbose_name="名称", unique=True, db_index=True) + + class Meta: + db_table = "user_group" + + +class UserGroupRelation(models.Model): + id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + user = models.ForeignKey(ChatUser, on_delete=models.CASCADE, verbose_name="用户") + group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, verbose_name="用户组") + + class Meta: + db_table = "user_group_relation" + + +class ChatUserPlatformSource(models.Model): + id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + auth_type = models.CharField(max_length=20, unique=True, db_index=True) + config = models.JSONField() + type = models.CharField(max_length=20, default="SSO", verbose_name="认证类型", db_index=True) + is_active = models.BooleanField(default=True, verbose_name="是否开启", db_index=True) + is_valid = models.BooleanField(default=True, verbose_name="是否有效", db_index=True) + + class Meta: + db_table = "chat_user_platform_source" + + +class ResourceType(models.TextChoices): + """资源类型""" + KNOWLEDGE = Group.KNOWLEDGE.value, '知识库' + APPLICATION = Group.APPLICATION.value, '应用' + + +class ResourceChatUserAuthorize(models.Model): + """ + 资源对话用户授权表 + """ + id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True, + null=True) + user_group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, verbose_name="用户组") + user = models.ForeignKey(ChatUser, on_delete=models.CASCADE, verbose_name="用户") + resource_id = models.UUIDField(max_length=128, verbose_name="资源id", db_index=True) + resource_type = models.CharField(verbose_name="资源类型", choices=ResourceType.choices, db_index=True) + is_auth = models.BooleanField(verbose_name="是否授权") + + class Meta: + db_table = "resource_chat_user_authorize" + unique_together = ('user_group_id', 'resource_type', 'resource_id', 'user_id') + + +class ResourceChatUserGroupAuthorize(models.Model): + """ + 资源对话用户组授权表 + """ + id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") + workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True, + null=True) + user_group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, verbose_name="用户组") + resource_id = models.UUIDField(max_length=128, verbose_name="资源id", db_index=True) + resource_type = models.CharField(verbose_name="资源类型", choices=ResourceType.choices, db_index=True) + is_auth = models.BooleanField(verbose_name="是否授权") + + class Meta: + db_table = "resource_chat_user_group_authorize" + unique_together = ('user_group_id', 'resource_type', 'resource_id')