mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
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.serializers.common_serializers import list_paragraph, get_embedding_model_by_dataset_id_list
|
||||
from embedding.models import SearchMode
|
||||
from function_lib.serializers.function_lib_serializer import FunctionLibSerializer
|
||||
from setting.models import AuthOperate
|
||||
from setting.models.model_management import Model
|
||||
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(
|
||||
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):
|
||||
if with_valid:
|
||||
self.is_valid()
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@ urlpatterns = [
|
|||
path('application/<str:application_id>/statistics/chat_record_aggregate_trend',
|
||||
views.ApplicationStatistics.ChatRecordAggregateTrend.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>/api_key', views.Application.ApplicationKey.as_view()),
|
||||
path("application/<str:application_id>/api_key/<str:api_key_id>",
|
||||
|
|
|
|||
|
|
@ -187,6 +187,43 @@ class Application(APIView):
|
|||
data={'application_id': application_id,
|
||||
'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):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
|
|
|
|||
|
|
@ -248,7 +248,32 @@ const putPublishApplication: (
|
|||
) => Promise<Result<any>> = (application_id, data, 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 {
|
||||
getAllAppilcation,
|
||||
getApplication,
|
||||
|
|
@ -268,5 +293,7 @@ export default {
|
|||
getApplicationHitTest,
|
||||
getApplicationModel,
|
||||
putPublishApplication,
|
||||
postWorkflowChatOpen
|
||||
postWorkflowChatOpen,
|
||||
listFunctionLib,
|
||||
getFunctionLib
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,7 +157,6 @@ import { datetimeFormat } from '@/utils/time'
|
|||
import useStore from '@/stores'
|
||||
import { WorkFlowInstance } from '@/workflow/common/validate'
|
||||
import { hasPermission } from '@/utils/permission'
|
||||
import functionLibApi from '@/api/function-lib'
|
||||
|
||||
const { user, application } = useStore()
|
||||
const router = useRouter()
|
||||
|
|
@ -300,7 +299,7 @@ function saveApplication() {
|
|||
}
|
||||
|
||||
function getList() {
|
||||
functionLibApi.getAllFunctionLib({}, loading).then((res: any) => {
|
||||
applicationApi.listFunctionLib(id, loading).then((res: any) => {
|
||||
functionLibList.value = res.data
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,11 +80,14 @@ import NodeCascader from '@/workflow/common/NodeCascader.vue'
|
|||
import type { FormInstance } from 'element-plus'
|
||||
import { ref, computed, onMounted } from 'vue'
|
||||
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 nodeCascaderRef = ref()
|
||||
|
||||
const {
|
||||
params: { id }
|
||||
} = app.config.globalProperties.$route as any
|
||||
const form = {
|
||||
input_field_list: [],
|
||||
is_result: false
|
||||
|
|
@ -113,8 +116,8 @@ const validate = () => {
|
|||
}
|
||||
|
||||
const update_field = () => {
|
||||
functionLibApi
|
||||
.getFunctionLibById(props.nodeModel.properties.node_data.function_lib_id)
|
||||
applicationApi
|
||||
.getFunctionLib(id, props.nodeModel.properties.node_data.function_lib_id)
|
||||
.then((ok) => {
|
||||
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) => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue