fix: 修复应用授权给其他用户,其他用户编辑无法编辑模型

This commit is contained in:
shaohuzhang1 2024-08-27 15:06:54 +08:00 committed by shaohuzhang1
parent d030a4c87c
commit b7ceac61ad
8 changed files with 64 additions and 14 deletions

View File

@ -589,6 +589,13 @@ class ApplicationSerializer(serializers.Serializer):
return FunctionLibSerializer.Operate(data={'user_id': application.user_id, 'id': function_lib_id}).one(
with_valid=True)
def get_model_params_form(self, model_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 ModelSerializer.ModelParams(
data={'user_id': application.user_id, 'id': model_id}).get_model_params(with_valid=True)
def delete(self, with_valid=True):
if with_valid:
self.is_valid()

View File

@ -22,6 +22,8 @@ urlpatterns = [
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>/model_params_form/<str:model_id>',
views.Application.ModelParamsForm.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>",

View File

@ -27,6 +27,7 @@ from common.response import result
from common.swagger_api.common_api import CommonApi
from common.util.common import query_params_to_single_dict
from dataset.serializers.dataset_serializers import DataSetSerializers
from setting.swagger_api.provide_api import ProvideApi
chat_cache = cache.caches['chat_cache']
@ -187,6 +188,24 @@ class Application(APIView):
data={'application_id': application_id,
'user_id': request.user.id}).list_model(request.query_params.get('model_type')))
class ModelParamsForm(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, model_id: str):
return result.success(
ApplicationSerializer.Operate(
data={'application_id': application_id,
'user_id': request.user.id}).get_model_params_form(model_id))
class FunctionLib(APIView):
authentication_classes = [TokenAuth]

View File

@ -3,7 +3,7 @@ import { get, post, postStream, del, put } from '@/request/index'
import type { pageRequest } from '@/api/type/common'
import type { ApplicationFormType } from '@/api/type/application'
import { type Ref } from 'vue'
import type { FormField } from '@/components/dynamics-form/type'
const prefix = '/application'
/**
@ -274,6 +274,20 @@ const getFunctionLib: (
) => Promise<Result<any>> = (application_id, function_lib_id, loading) => {
return get(`${prefix}/${application_id}/function_lib/${function_lib_id}`, undefined, loading)
}
/**
*
* @param application_id id
* @param model_id id
* @param loading
* @returns
*/
const getModelParamsForm: (
application_id: String,
model_id: String,
loading?: Ref<boolean>
) => Promise<Result<Array<FormField>>> = (application_id, model_id, loading) => {
return get(`${prefix}/${application_id}/model_params_form/${model_id}`, undefined, loading)
}
export default {
getAllAppilcation,
getApplication,
@ -295,5 +309,6 @@ export default {
putPublishApplication,
postWorkflowChatOpen,
listFunctionLib,
getFunctionLib
getFunctionLib,
getModelParamsForm
}

View File

@ -453,7 +453,7 @@ const submit = async (formEl: FormInstance | undefined) => {
}
const model_change = (model_id?: string) => {
if (model_id) {
AIModeParamSettingDialogRef.value?.reset_default(model_id)
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
} else {
refreshForm({})
}
@ -464,7 +464,7 @@ const openAIParamSettingDialog = () => {
MsgSuccess(t('请选择AI 模型'))
return
}
AIModeParamSettingDialogRef.value?.open(model_id, applicationForm.value.model_params_setting)
AIModeParamSettingDialogRef.value?.open(model_id, id, applicationForm.value.model_params_setting)
}
const openParamSettingDialog = () => {

View File

@ -34,6 +34,7 @@
import { ref } from 'vue'
import type { FormField } from '@/components/dynamics-form/type'
import modelAPi from '@/api/model'
import applicationApi from '@/api/application'
import DynamicsForm from '@/components/dynamics-form/index.vue'
import { keys } from 'lodash'
const model_form_field = ref<Array<FormField>>([])
@ -42,16 +43,21 @@ const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>()
const form_data = ref<any>({})
const dialogVisible = ref(false)
const loading = ref(false)
const open = (model_id: string, model_setting_data?: any) => {
const getApi = (model_id: string, application_id?: string) => {
return application_id
? applicationApi.getModelParamsForm(application_id, model_id, loading)
: modelAPi.getModelParamsForm(model_id, loading)
}
const open = (model_id: string, application_id?: string, model_setting_data?: any) => {
form_data.value = {}
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
const api = getApi(model_id, application_id)
api.then((ok) => {
model_form_field.value = ok.data
model_setting_data =
model_setting_data && keys(model_setting_data).length > 0
? model_setting_data
: ok.data
.map((item) => ({ [item.field]: item.default_value }))
.map((item: any) => ({ [item.field]: item.default_value }))
.reduce((x, y) => ({ ...x, ...y }), {})
//
dynamicsFormRef.value?.render(model_form_field.value, model_setting_data)
@ -59,8 +65,9 @@ const open = (model_id: string, model_setting_data?: any) => {
dialogVisible.value = true
}
const reset_default = (model_id: string) => {
modelAPi.getModelParamsForm(model_id, loading).then((ok) => {
const reset_default = (model_id: string, application_id?: string) => {
const api = getApi(model_id, application_id)
api.then((ok) => {
model_form_field.value = ok.data
const model_setting_data = ok.data
.map((item) => ({ [item.field]: item.default_value }))

View File

@ -241,7 +241,7 @@ function submitDialog() {
}
const model_change = (model_id?: string) => {
if (model_id) {
AIModeParamSettingDialogRef.value?.reset_default(model_id)
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
} else {
refreshParam({})
}
@ -321,7 +321,7 @@ const openCreateModel = (provider?: Provider) => {
const openAIParamSettingDialog = (modelId: string) => {
if (modelId) {
AIModeParamSettingDialogRef.value?.open(modelId, chat_data.value.model_params_setting)
AIModeParamSettingDialogRef.value?.open(modelId, id, chat_data.value.model_params_setting)
}
}

View File

@ -234,7 +234,7 @@ function openDialog() {
}
const model_change = (model_id?: string) => {
if (model_id) {
AIModeParamSettingDialogRef.value?.reset_default(model_id)
AIModeParamSettingDialogRef.value?.reset_default(model_id, id)
} else {
refreshParam({})
}
@ -263,7 +263,7 @@ function refreshParam(data: any) {
const openAIParamSettingDialog = (modelId: string) => {
if (modelId) {
AIModeParamSettingDialogRef.value?.open(modelId, form_data.value.model_params_setting)
AIModeParamSettingDialogRef.value?.open(modelId, id, form_data.value.model_params_setting)
}
}
const form_data = computed({