Skip to content

Commit f318f2d

Browse files
committed
feat: 应用、知识库、函数库增加创建者
--story=1016834 --user=王孝刚 应用、知识库、函数增加创建者,可以按创建用户查看资源 #1304 https://www.tapd.cn/57709429/s/1605886
1 parent 81b8e52 commit f318f2d

File tree

14 files changed

+323
-66
lines changed

14 files changed

+323
-66
lines changed

apps/application/serializers/application_serializers.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
from django.contrib.postgres.fields import ArrayField
2020
from django.core import cache, validators
2121
from django.core import signing
22+
from django.core.paginator import Paginator
2223
from django.db import transaction, models
23-
from django.db.models import QuerySet
24+
from django.db.models import QuerySet, Q
25+
from django.forms import CharField
2426
from django.http import HttpResponse
2527
from django.template import Template, Context
2628
from rest_framework import serializers
@@ -44,7 +46,7 @@
4446
from dataset.serializers.common_serializers import list_paragraph, get_embedding_model_by_dataset_id_list
4547
from embedding.models import SearchMode
4648
from function_lib.serializers.function_lib_serializer import FunctionLibSerializer
47-
from setting.models import AuthOperate
49+
from setting.models import AuthOperate, TeamMember, TeamMemberPermission
4850
from setting.models.model_management import Model
4951
from setting.models_provider import get_model_credential
5052
from setting.models_provider.constants.model_provider_constants import ModelProvideConstants
@@ -559,17 +561,22 @@ class Query(serializers.Serializer):
559561
desc = serializers.CharField(required=False, error_messages=ErrMessage.char("应用描述"))
560562

561563
user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("用户id"))
564+
select_user_id = serializers.UUIDField(required=False, error_messages=ErrMessage.uuid("选择用户id"))
562565

563566
def get_query_set(self):
564567
user_id = self.data.get("user_id")
565568
query_set_dict = {}
566569
query_set = QuerySet(model=get_dynamics_model(
567570
{'temp_application.name': models.CharField(), 'temp_application.desc': models.CharField(),
568-
'temp_application.create_time': models.DateTimeField()}))
571+
'temp_application.create_time': models.DateTimeField(),
572+
'temp_application.user_id': models.CharField(), }))
569573
if "desc" in self.data and self.data.get('desc') is not None:
570574
query_set = query_set.filter(**{'temp_application.desc__icontains': self.data.get("desc")})
571575
if "name" in self.data and self.data.get('name') is not None:
572576
query_set = query_set.filter(**{'temp_application.name__icontains': self.data.get("name")})
577+
if 'select_user_id' in self.data and self.data.get('select_user_id') is not None and self.data.get(
578+
'select_user_id') != 'all':
579+
query_set = query_set.filter(**{'temp_application.user_id__exact': self.data.get('select_user_id')})
573580
query_set = query_set.order_by("-temp_application.create_time")
574581
query_set_dict['default_sql'] = query_set
575582

apps/dataset/serializers/dataset_serializers.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,21 @@ class Query(ApiMixin, serializers.Serializer):
129129
)
130130

131131
user_id = serializers.CharField(required=True)
132+
select_user_id = serializers.CharField(required=False)
132133

133134
def get_query_set(self):
134135
user_id = self.data.get("user_id")
135136
query_set_dict = {}
136137
query_set = QuerySet(model=get_dynamics_model(
137138
{'temp.name': models.CharField(), 'temp.desc': models.CharField(),
138-
"document_temp.char_length": models.IntegerField(), 'temp.create_time': models.DateTimeField()}))
139+
"document_temp.char_length": models.IntegerField(), 'temp.create_time': models.DateTimeField(),
140+
'temp.user_id': models.CharField(), }))
139141
if "desc" in self.data and self.data.get('desc') is not None:
140142
query_set = query_set.filter(**{'temp.desc__icontains': self.data.get("desc")})
141143
if "name" in self.data and self.data.get('name') is not None:
142144
query_set = query_set.filter(**{'temp.name__icontains': self.data.get("name")})
145+
if "select_user_id" in self.data and self.data.get('select_user_id') is not None:
146+
query_set = query_set.filter(**{'temp.user_id__exact': self.data.get("select_user_id")})
143147
query_set = query_set.order_by("-temp.create_time")
144148
query_set_dict['default_sql'] = query_set
145149

apps/dataset/views/dataset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ class Page(APIView):
221221
def get(self, request: Request, current_page, page_size):
222222
d = DataSetSerializers.Query(
223223
data={'name': request.query_params.get('name', None), 'desc': request.query_params.get("desc", None),
224-
'user_id': str(request.user.id)})
224+
'user_id': str(request.user.id), 'select_user_id': request.query_params.get('select_user_id', None)})
225225
d.is_valid()
226226
return result.success(d.page(current_page, page_size))
227227

apps/function_lib/serializers/function_lib_serializer.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class Query(serializers.Serializer):
9898
is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.char("是否可用"))
9999

100100
user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid("用户id"))
101+
select_user_id = serializers.CharField(required=False, allow_null=True, allow_blank=True)
101102

102103
def get_query_set(self):
103104
query_set = QuerySet(FunctionLib).filter(
@@ -108,6 +109,8 @@ def get_query_set(self):
108109
query_set = query_set.filter(desc__contains=self.data.get('desc'))
109110
if self.data.get('is_active') is not None:
110111
query_set = query_set.filter(is_active=self.data.get('is_active'))
112+
if self.data.get('select_user_id') is not None:
113+
query_set = query_set.filter(user_id=self.data.get('select_user_id'))
111114
query_set = query_set.order_by("-create_time")
112115
return query_set
113116

apps/function_lib/views/function_lib_views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,6 @@ def get(self, request: Request, current_page: int, page_size: int):
105105
FunctionLibSerializer.Query(
106106
data={'name': request.query_params.get('name'),
107107
'desc': request.query_params.get('desc'),
108-
'user_id': request.user.id}).page(
108+
'user_id': request.user.id,
109+
'select_user_id': request.query_params.get('select_user_id')}).page(
109110
current_page, page_size))

apps/users/serializers/user_serializers.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from django.core.mail import send_mail
1818
from django.core.mail.backends.smtp import EmailBackend
1919
from django.db import transaction
20-
from django.db.models import Q, QuerySet
20+
from django.db.models import Q, QuerySet, Prefetch
2121
from drf_yasg import openapi
2222
from rest_framework import serializers
2323

@@ -35,6 +35,7 @@
3535
from common.util.lock import lock
3636
from dataset.models import DataSet, Document, Paragraph, Problem, ProblemParagraphMapping
3737
from embedding.task import delete_embedding_by_dataset_id_list
38+
from function_lib.models.function import FunctionLib
3839
from setting.models import Team, SystemSetting, SettingType, Model, TeamMember, TeamMemberPermission
3940
from smartdoc.conf import PROJECT_DIR
4041
from users.models.user import User, password_encrypt, get_user_dynamics_permission
@@ -495,6 +496,40 @@ def list(self, with_valid=True):
495496
return [{'id': user_model.id, 'username': user_model.username, 'email': user_model.email} for user_model in
496497
QuerySet(User).filter(Q(username=email_or_username) | Q(email=email_or_username))]
497498

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+
498533

499534
class UserInstanceSerializer(ApiMixin, serializers.ModelSerializer):
500535
class Meta:

apps/users/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@
2121
name="user_manage_re_password"),
2222
path("user_manage/<int:current_page>/<int:page_size>", views.UserManage.Page.as_view(),
2323
name="user_manage_re_password"),
24+
path('user/list/<str:type>', views.UserListView.as_view()),
2425
]

apps/users/views/user.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,3 +301,16 @@ def get(self, request: Request, user_id):
301301
def put(self, request: Request, user_id):
302302
return result.success(
303303
UserManageSerializer.Operate(data={'id': user_id}).edit(request.data, with_valid=True))
304+
305+
306+
class UserListView(APIView):
307+
authentication_classes = [TokenAuth]
308+
309+
@swagger_auto_schema(operation_summary="通过类型获取用户列表",
310+
operation_id="通过类型获取用户列表",
311+
manual_parameters=UserSerializer.Query.get_request_params_api(),
312+
responses=result.get_api_array_response(UserSerializer.Query.get_response_body_api()),
313+
tags=['用户'])
314+
@has_permissions(PermissionConstants.USER_READ)
315+
def get(self, request: Request, type):
316+
return result.success(UserSerializer().listByType(type, request.user.id))

ui/src/api/application.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,13 @@ const putWorkFlowVersion: (
456456
)
457457
}
458458

459+
const getUserList: (type: string, loading?: Ref<boolean>) => Promise<Result<any>> = (
460+
type,
461+
loading
462+
) => {
463+
return get(`/user/list/${type}`, undefined, loading)
464+
}
465+
459466
export default {
460467
getAllAppilcation,
461468
getApplication,
@@ -492,5 +499,6 @@ export default {
492499
getWorkFlowVersion,
493500
getWorkFlowVersionDetail,
494501
putWorkFlowVersion,
495-
playDemoText
502+
playDemoText,
503+
getUserList
496504
}

ui/src/components/card-box/index.vue

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,19 @@
88
<img src="@/assets/icon_document.svg" style="width: 58%" alt="" />
99
</AppAvatar>
1010
</slot>
11-
<auto-tooltip :content="title" style="width: 65%">
12-
{{ title }}
13-
</auto-tooltip>
11+
<div>
12+
<auto-tooltip :content="title" style="width: 65%; height: 22px">
13+
{{ title }}
14+
</auto-tooltip>
15+
<span class="lighter mr-8">
16+
<auto-tooltip
17+
:content="username"
18+
style="display: inline-block; width: 100%; font-size: 12px; height: 20px"
19+
>
20+
创建人: {{ username }}
21+
</auto-tooltip></span
22+
>
23+
</div>
1424
</div>
1525
</slot>
1626
</div>
@@ -49,6 +59,7 @@ const props = withDefaults(
4959
* 是否展示icon
5060
*/
5161
showIcon?: boolean
62+
username?: string
5263
}>(),
5364
{ title: '标题', description: '', showIcon: true, border: true }
5465
)
@@ -62,13 +73,12 @@ function cardEnter() {
6273
}
6374
6475
function cardLeave() {
65-
show.value = subHovered.value;
76+
show.value = subHovered.value
6677
}
6778
6879
function subHoveredEnter() {
6980
subHovered.value = true
7081
}
71-
7282
</script>
7383
<style lang="scss" scoped>
7484
.card-box {

0 commit comments

Comments
 (0)