fix: 修复【应用编排】授权给其他用户的应用编排,其他用户查看的时候不应该提示函数不存在
This commit is contained in:
parent
a9443a638c
commit
d030a4c87c
@ -42,6 +42,7 @@ from common.util.file_util import get_file_content
|
|||||||
from dataset.models import DataSet, Document, Image
|
from dataset.models import DataSet, Document, Image
|
||||||
from dataset.serializers.common_serializers import list_paragraph, get_embedding_model_by_dataset_id_list
|
from dataset.serializers.common_serializers import list_paragraph, get_embedding_model_by_dataset_id_list
|
||||||
from embedding.models import SearchMode
|
from embedding.models import SearchMode
|
||||||
|
from function_lib.serializers.function_lib_serializer import FunctionLibSerializer
|
||||||
from setting.models import AuthOperate
|
from setting.models import AuthOperate
|
||||||
from setting.models.model_management import Model
|
from setting.models.model_management import Model
|
||||||
from setting.models_provider import get_model_credential
|
from setting.models_provider import get_model_credential
|
||||||
@ -575,6 +576,19 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
data={'user_id': application.user_id, 'model_type': model_type}).list(
|
data={'user_id': application.user_id, 'model_type': model_type}).list(
|
||||||
with_valid=True)
|
with_valid=True)
|
||||||
|
|
||||||
|
def list_function_lib(self, with_valid=True):
|
||||||
|
if with_valid:
|
||||||
|
self.is_valid(raise_exception=True)
|
||||||
|
application = QuerySet(Application).filter(id=self.data.get("application_id")).first()
|
||||||
|
return FunctionLibSerializer.Query(data={'user_id': application.user_id}).list(with_valid=True)
|
||||||
|
|
||||||
|
def get_function_lib(self, function_lib_id, with_valid=True):
|
||||||
|
if with_valid:
|
||||||
|
self.is_valid(raise_exception=True)
|
||||||
|
application = QuerySet(Application).filter(id=self.data.get("application_id")).first()
|
||||||
|
return FunctionLibSerializer.Operate(data={'user_id': application.user_id, 'id': function_lib_id}).one(
|
||||||
|
with_valid=True)
|
||||||
|
|
||||||
def delete(self, with_valid=True):
|
def delete(self, with_valid=True):
|
||||||
if with_valid:
|
if with_valid:
|
||||||
self.is_valid()
|
self.is_valid()
|
||||||
|
|||||||
@ -19,6 +19,9 @@ urlpatterns = [
|
|||||||
path('application/<str:application_id>/statistics/chat_record_aggregate_trend',
|
path('application/<str:application_id>/statistics/chat_record_aggregate_trend',
|
||||||
views.ApplicationStatistics.ChatRecordAggregateTrend.as_view()),
|
views.ApplicationStatistics.ChatRecordAggregateTrend.as_view()),
|
||||||
path('application/<str:application_id>/model', views.Application.Model.as_view()),
|
path('application/<str:application_id>/model', views.Application.Model.as_view()),
|
||||||
|
path('application/<str:application_id>/function_lib', views.Application.FunctionLib.as_view()),
|
||||||
|
path('application/<str:application_id>/function_lib/<str:function_lib_id>',
|
||||||
|
views.Application.FunctionLib.Operate.as_view()),
|
||||||
path('application/<str:application_id>/hit_test', views.Application.HitTest.as_view()),
|
path('application/<str:application_id>/hit_test', views.Application.HitTest.as_view()),
|
||||||
path('application/<str:application_id>/api_key', views.Application.ApplicationKey.as_view()),
|
path('application/<str:application_id>/api_key', views.Application.ApplicationKey.as_view()),
|
||||||
path("application/<str:application_id>/api_key/<str:api_key_id>",
|
path("application/<str:application_id>/api_key/<str:api_key_id>",
|
||||||
|
|||||||
@ -187,6 +187,43 @@ class Application(APIView):
|
|||||||
data={'application_id': application_id,
|
data={'application_id': application_id,
|
||||||
'user_id': request.user.id}).list_model(request.query_params.get('model_type')))
|
'user_id': request.user.id}).list_model(request.query_params.get('model_type')))
|
||||||
|
|
||||||
|
class FunctionLib(APIView):
|
||||||
|
authentication_classes = [TokenAuth]
|
||||||
|
|
||||||
|
@action(methods=["GET"], detail=False)
|
||||||
|
@swagger_auto_schema(operation_summary="获取函数库列表",
|
||||||
|
operation_id="获取函数库列表",
|
||||||
|
tags=["应用"])
|
||||||
|
@has_permissions(ViewPermission(
|
||||||
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
||||||
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||||
|
dynamic_tag=keywords.get('application_id'))],
|
||||||
|
compare=CompareConstants.AND))
|
||||||
|
def get(self, request: Request, application_id: str):
|
||||||
|
return result.success(
|
||||||
|
ApplicationSerializer.Operate(
|
||||||
|
data={'application_id': application_id,
|
||||||
|
'user_id': request.user.id}).list_function_lib())
|
||||||
|
|
||||||
|
class Operate(APIView):
|
||||||
|
authentication_classes = [TokenAuth]
|
||||||
|
|
||||||
|
@action(methods=["GET"], detail=False)
|
||||||
|
@swagger_auto_schema(operation_summary="获取函数库列表",
|
||||||
|
operation_id="获取函数库列表",
|
||||||
|
tags=["应用"],
|
||||||
|
)
|
||||||
|
@has_permissions(ViewPermission(
|
||||||
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
||||||
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||||
|
dynamic_tag=keywords.get('application_id'))],
|
||||||
|
compare=CompareConstants.AND))
|
||||||
|
def get(self, request: Request, application_id: str, function_lib_id: str):
|
||||||
|
return result.success(
|
||||||
|
ApplicationSerializer.Operate(
|
||||||
|
data={'application_id': application_id,
|
||||||
|
'user_id': request.user.id}).get_function_lib(function_lib_id))
|
||||||
|
|
||||||
class Profile(APIView):
|
class Profile(APIView):
|
||||||
authentication_classes = [TokenAuth]
|
authentication_classes = [TokenAuth]
|
||||||
|
|
||||||
|
|||||||
@ -248,7 +248,32 @@ const putPublishApplication: (
|
|||||||
) => Promise<Result<any>> = (application_id, data, loading) => {
|
) => Promise<Result<any>> = (application_id, data, loading) => {
|
||||||
return put(`${prefix}/${application_id}/publish`, data, undefined, loading)
|
return put(`${prefix}/${application_id}/publish`, data, undefined, loading)
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 获取应用所属的函数库列表
|
||||||
|
* @param application_id 应用id
|
||||||
|
* @param loading
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const listFunctionLib: (application_id: String, loading?: Ref<boolean>) => Promise<Result<any>> = (
|
||||||
|
application_id,
|
||||||
|
loading
|
||||||
|
) => {
|
||||||
|
return get(`${prefix}/${application_id}/function_lib`, undefined, loading)
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获取应用所属的函数库
|
||||||
|
* @param application_id
|
||||||
|
* @param function_lib_id
|
||||||
|
* @param loading
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getFunctionLib: (
|
||||||
|
application_id: String,
|
||||||
|
function_lib_id: String,
|
||||||
|
loading?: Ref<boolean>
|
||||||
|
) => Promise<Result<any>> = (application_id, function_lib_id, loading) => {
|
||||||
|
return get(`${prefix}/${application_id}/function_lib/${function_lib_id}`, undefined, loading)
|
||||||
|
}
|
||||||
export default {
|
export default {
|
||||||
getAllAppilcation,
|
getAllAppilcation,
|
||||||
getApplication,
|
getApplication,
|
||||||
@ -268,5 +293,7 @@ export default {
|
|||||||
getApplicationHitTest,
|
getApplicationHitTest,
|
||||||
getApplicationModel,
|
getApplicationModel,
|
||||||
putPublishApplication,
|
putPublishApplication,
|
||||||
postWorkflowChatOpen
|
postWorkflowChatOpen,
|
||||||
|
listFunctionLib,
|
||||||
|
getFunctionLib
|
||||||
}
|
}
|
||||||
|
|||||||
@ -157,7 +157,6 @@ import { datetimeFormat } from '@/utils/time'
|
|||||||
import useStore from '@/stores'
|
import useStore from '@/stores'
|
||||||
import { WorkFlowInstance } from '@/workflow/common/validate'
|
import { WorkFlowInstance } from '@/workflow/common/validate'
|
||||||
import { hasPermission } from '@/utils/permission'
|
import { hasPermission } from '@/utils/permission'
|
||||||
import functionLibApi from '@/api/function-lib'
|
|
||||||
|
|
||||||
const { user, application } = useStore()
|
const { user, application } = useStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@ -300,7 +299,7 @@ function saveApplication() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getList() {
|
function getList() {
|
||||||
functionLibApi.getAllFunctionLib({}, loading).then((res: any) => {
|
applicationApi.listFunctionLib(id, loading).then((res: any) => {
|
||||||
functionLibList.value = res.data
|
functionLibList.value = res.data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,11 +80,14 @@ import NodeCascader from '@/workflow/common/NodeCascader.vue'
|
|||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import { ref, computed, onMounted } from 'vue'
|
import { ref, computed, onMounted } from 'vue'
|
||||||
import { isLastNode } from '@/workflow/common/data'
|
import { isLastNode } from '@/workflow/common/data'
|
||||||
import functionLibApi from '@/api/function-lib'
|
import applicationApi from '@/api/application'
|
||||||
|
import { app } from '@/main'
|
||||||
const props = defineProps<{ nodeModel: any }>()
|
const props = defineProps<{ nodeModel: any }>()
|
||||||
|
|
||||||
const nodeCascaderRef = ref()
|
const nodeCascaderRef = ref()
|
||||||
|
const {
|
||||||
|
params: { id }
|
||||||
|
} = app.config.globalProperties.$route as any
|
||||||
const form = {
|
const form = {
|
||||||
input_field_list: [],
|
input_field_list: [],
|
||||||
is_result: false
|
is_result: false
|
||||||
@ -113,8 +116,8 @@ const validate = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const update_field = () => {
|
const update_field = () => {
|
||||||
functionLibApi
|
applicationApi
|
||||||
.getFunctionLibById(props.nodeModel.properties.node_data.function_lib_id)
|
.getFunctionLib(id, props.nodeModel.properties.node_data.function_lib_id)
|
||||||
.then((ok) => {
|
.then((ok) => {
|
||||||
const old_input_field_list = props.nodeModel.properties.node_data.input_field_list
|
const old_input_field_list = props.nodeModel.properties.node_data.input_field_list
|
||||||
const merge_input_field_list = ok.data.input_field_list.map((item: any) => {
|
const merge_input_field_list = ok.data.input_field_list.map((item: any) => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user