|
17 | 17 | from django.core.mail import send_mail |
18 | 18 | from django.core.mail.backends.smtp import EmailBackend |
19 | 19 | from django.db import transaction |
20 | | -from django.db.models import Q, QuerySet |
| 20 | +from django.db.models import Q, QuerySet, Prefetch |
21 | 21 | from drf_yasg import openapi |
22 | 22 | from rest_framework import serializers |
23 | 23 |
|
|
35 | 35 | from common.util.lock import lock |
36 | 36 | from dataset.models import DataSet, Document, Paragraph, Problem, ProblemParagraphMapping |
37 | 37 | from embedding.task import delete_embedding_by_dataset_id_list |
| 38 | +from function_lib.models.function import FunctionLib |
38 | 39 | from setting.models import Team, SystemSetting, SettingType, Model, TeamMember, TeamMemberPermission |
39 | 40 | from smartdoc.conf import PROJECT_DIR |
40 | 41 | from users.models.user import User, password_encrypt, get_user_dynamics_permission |
@@ -495,6 +496,40 @@ def list(self, with_valid=True): |
495 | 496 | return [{'id': user_model.id, 'username': user_model.username, 'email': user_model.email} for user_model in |
496 | 497 | QuerySet(User).filter(Q(username=email_or_username) | Q(email=email_or_username))] |
497 | 498 |
|
| 499 | + def listByType(self, type, user_id): |
| 500 | + teamIds = TeamMember.objects.filter(user_id=user_id).values_list('id', flat=True) |
| 501 | + targets = TeamMemberPermission.objects.filter( |
| 502 | + member_id__in=teamIds, |
| 503 | + auth_target_type=type, |
| 504 | + operate__contains=['USE'] |
| 505 | + ).values_list('target', flat=True) |
| 506 | + prefetch_users = Prefetch('user', queryset=User.objects.only('id', 'username')) |
| 507 | + |
| 508 | + user_list = [] |
| 509 | + if type == 'DATASET': |
| 510 | + user_list = DataSet.objects.filter( |
| 511 | + Q(id__in=targets) | Q(user_id=user_id) |
| 512 | + ).prefetch_related(prefetch_users).distinct('user_id') |
| 513 | + elif type == 'APPLICATION': |
| 514 | + user_list = Application.objects.filter( |
| 515 | + Q(id__in=targets) | Q(user_id=user_id) |
| 516 | + ).prefetch_related(prefetch_users).distinct('user_id') |
| 517 | + elif type == 'FUNCTION': |
| 518 | + user_list = FunctionLib.objects.filter( |
| 519 | + Q(permission_type='PUBLIC') | Q(user_id=user_id) |
| 520 | + ).prefetch_related(prefetch_users).distinct('user_id') |
| 521 | + |
| 522 | + other_users = [ |
| 523 | + {'id': app.user.id, 'username': app.user.username} |
| 524 | + for app in user_list if app.user.id != user_id |
| 525 | + ] |
| 526 | + users = [ |
| 527 | + {'id': 'all', 'username': '全部'}, |
| 528 | + {'id': user_id, 'username': '我的'} |
| 529 | + ] |
| 530 | + users.extend(other_users) |
| 531 | + return users |
| 532 | + |
498 | 533 |
|
499 | 534 | class UserInstanceSerializer(ApiMixin, serializers.ModelSerializer): |
500 | 535 | class Meta: |
|
0 commit comments