瀏覽代碼

fix: privilege for editor role (#6521)

Jason Tan 9 月之前
父節點
當前提交
87d583f454

+ 5 - 5
web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout.tsx

@@ -40,7 +40,7 @@ const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => {
   const pathname = usePathname()
   const media = useBreakpoints()
   const isMobile = media === MediaType.mobile
-  const { isCurrentWorkspaceManager, isCurrentWorkspaceEditor } = useAppContext()
+  const { isCurrentWorkspaceEditor } = useAppContext()
   const { appDetail, setAppDetail, setAppSiderbarExpand } = useStore(useShallow(state => ({
     appDetail: state.appDetail,
     setAppDetail: state.setAppDetail,
@@ -53,7 +53,7 @@ const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => {
     selectedIcon: NavIcon
   }>>([])
 
-  const getNavigations = useCallback((appId: string, isCurrentWorkspaceManager: boolean, isCurrentWorkspaceEditor: boolean, mode: string) => {
+  const getNavigations = useCallback((appId: string, isCurrentWorkspaceEditor: boolean, mode: string) => {
     const navs = [
       ...(isCurrentWorkspaceEditor
         ? [{
@@ -70,7 +70,7 @@ const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => {
         icon: RiTerminalBoxLine,
         selectedIcon: RiTerminalBoxFill,
       },
-      ...(isCurrentWorkspaceManager
+      ...(isCurrentWorkspaceEditor
         ? [{
           name: mode !== 'workflow'
             ? t('common.appMenus.logAndAnn')
@@ -115,13 +115,13 @@ const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => {
       }
       else {
         setAppDetail(res)
-        setNavigation(getNavigations(appId, isCurrentWorkspaceManager, isCurrentWorkspaceEditor, res.mode))
+        setNavigation(getNavigations(appId, isCurrentWorkspaceEditor, res.mode))
       }
     }).catch((e: any) => {
       if (e.status === 404)
         router.replace('/apps')
     })
-  }, [appId, isCurrentWorkspaceManager, isCurrentWorkspaceEditor])
+  }, [appId, isCurrentWorkspaceEditor])
 
   useUnmount(() => {
     setAppDetail()

+ 4 - 2
web/app/components/header/account-setting/model-provider-page/provider-added-card/index.tsx

@@ -25,6 +25,7 @@ import { ChevronDownDouble } from '@/app/components/base/icons/src/vender/line/a
 import { fetchModelProviderModelList } from '@/service/common'
 import { useEventEmitterContextContext } from '@/context/event-emitter'
 import { IS_CE_EDITION } from '@/config'
+import { useAppContext } from '@/context/app-context'
 
 export const UPDATE_MODEL_PROVIDER_CUSTOM_MODEL_LIST = 'UPDATE_MODEL_PROVIDER_CUSTOM_MODEL_LIST'
 type ProviderAddedCardProps = {
@@ -44,6 +45,7 @@ const ProviderAddedCard: FC<ProviderAddedCardProps> = ({
   const configurationMethods = provider.configurate_methods.filter(method => method !== ConfigurationMethodEnum.fetchFromRemote)
   const systemConfig = provider.system_configuration
   const hasModelList = fetched && !!modelList.length
+  const { isCurrentWorkspaceManager } = useAppContext()
   const showQuota = systemConfig.enabled && [...MODEL_PROVIDER_QUOTA_GET_PAID].includes(provider.provider) && !IS_CE_EDITION
 
   const getModelList = async (providerName: string) => {
@@ -103,7 +105,7 @@ const ProviderAddedCard: FC<ProviderAddedCardProps> = ({
           )
         }
         {
-          configurationMethods.includes(ConfigurationMethodEnum.predefinedModel) && (
+          configurationMethods.includes(ConfigurationMethodEnum.predefinedModel) && isCurrentWorkspaceManager && (
             <CredentialPanel
               onSetup={() => onOpenModal(ConfigurationMethodEnum.predefinedModel)}
               provider={provider}
@@ -138,7 +140,7 @@ const ProviderAddedCard: FC<ProviderAddedCardProps> = ({
               }
             </div>
             {
-              configurationMethods.includes(ConfigurationMethodEnum.customizableModel) && (
+              configurationMethods.includes(ConfigurationMethodEnum.customizableModel) && isCurrentWorkspaceManager && (
                 <AddModelButton
                   onClick={() => onOpenModal(ConfigurationMethodEnum.customizableModel)}
                   className='hidden group-hover:flex group-hover:text-primary-600'

+ 7 - 5
web/app/components/header/account-setting/model-provider-page/provider-added-card/model-list-item.tsx

@@ -15,6 +15,7 @@ import TooltipPlus from '@/app/components/base/tooltip-plus'
 import { useProviderContext, useProviderContextSelector } from '@/context/provider-context'
 import { disableModel, enableModel } from '@/service/common'
 import { Plan } from '@/app/components/billing/type'
+import { useAppContext } from '@/context/app-context'
 
 export type ModelListItemProps = {
   model: ModelItem
@@ -28,6 +29,7 @@ const ModelListItem = ({ model, provider, isConfigurable, onConfig, onModifyLoad
   const { t } = useTranslation()
   const { plan } = useProviderContext()
   const modelLoadBalancingEnabled = useProviderContextSelector(state => state.modelLoadBalancingEnabled)
+  const { isCurrentWorkspaceManager } = useAppContext()
 
   const toggleModelEnablingStatus = useCallback(async (enabled: boolean) => {
     if (enabled)
@@ -73,7 +75,7 @@ const ModelListItem = ({ model, provider, isConfigurable, onConfig, onModifyLoad
       <div className='shrink-0 flex items-center'>
         {
           model.fetch_from === ConfigurationMethodEnum.customizableModel
-            ? (
+            ? (isCurrentWorkspaceManager && (
               <Button
                 className='hidden group-hover:flex h-7'
                 onClick={() => onConfig({ __model_name: model.model, __model_type: model.model_type })}
@@ -81,8 +83,8 @@ const ModelListItem = ({ model, provider, isConfigurable, onConfig, onModifyLoad
                 <Settings01 className='mr-[5px] w-3.5 h-3.5' />
                 {t('common.modelProvider.config')}
               </Button>
-            )
-            : ((modelLoadBalancingEnabled || plan.type === Plan.sandbox) && !model.deprecated && [ModelStatusEnum.active, ModelStatusEnum.disabled].includes(model.status))
+            ))
+            : (isCurrentWorkspaceManager && (modelLoadBalancingEnabled || plan.type === Plan.sandbox) && !model.deprecated && [ModelStatusEnum.active, ModelStatusEnum.disabled].includes(model.status))
               ? (
                 <Button
                   className='opacity-0 group-hover:opacity-100 h-[28px] transition-opacity'
@@ -101,7 +103,7 @@ const ModelListItem = ({ model, provider, isConfigurable, onConfig, onModifyLoad
                 <Switch defaultValue={false} disabled size='md' />
               </TooltipPlus>
             )
-            : (
+            : (isCurrentWorkspaceManager && (
               <Switch
                 className='ml-2'
                 defaultValue={model?.status === ModelStatusEnum.active}
@@ -109,7 +111,7 @@ const ModelListItem = ({ model, provider, isConfigurable, onConfig, onModifyLoad
                 size='md'
                 onChange={onEnablingStateChange}
               />
-            )
+            ))
         }
       </div>
     </div>

+ 3 - 1
web/app/components/header/account-setting/model-provider-page/provider-added-card/model-list.tsx

@@ -14,6 +14,7 @@ import AddModelButton from './add-model-button'
 import ModelListItem from './model-list-item'
 import { ChevronDownDouble } from '@/app/components/base/icons/src/vender/line/arrows'
 import { useModalContextSelector } from '@/context/modal-context'
+import { useAppContext } from '@/context/app-context'
 
 type ModelListProps = {
   provider: ModelProvider
@@ -31,6 +32,7 @@ const ModelList: FC<ModelListProps> = ({
 }) => {
   const { t } = useTranslation()
   const configurativeMethods = provider.configurate_methods.filter(method => method !== ConfigurationMethodEnum.fetchFromRemote)
+  const { isCurrentWorkspaceManager } = useAppContext()
   const isConfigurable = configurativeMethods.includes(ConfigurationMethodEnum.customizableModel)
 
   const setShowModelLoadBalancingModal = useModalContextSelector(state => state.setShowModelLoadBalancingModal)
@@ -68,7 +70,7 @@ const ModelList: FC<ModelListProps> = ({
             )
           } */}
           {
-            isConfigurable && (
+            isConfigurable && isCurrentWorkspaceManager && (
               <div className='grow flex justify-end'>
                 <AddModelButton onClick={() => onConfig()} />
               </div>

+ 4 - 0
web/app/components/header/account-setting/model-provider-page/provider-card/index.tsx

@@ -19,6 +19,7 @@ import ProviderIcon from '../provider-icon'
 import s from './index.module.css'
 import { Settings01 } from '@/app/components/base/icons/src/vender/line/general'
 import Button from '@/app/components/base/button'
+import { useAppContext } from '@/context/app-context'
 
 type ProviderCardProps = {
   provider: ModelProvider
@@ -31,6 +32,7 @@ const ProviderCard: FC<ProviderCardProps> = ({
 }) => {
   const { t } = useTranslation()
   const language = useLanguage()
+  const { isCurrentWorkspaceManager } = useAppContext()
   const configurateMethods = provider.configurate_methods.filter(method => method !== ConfigurationMethodEnum.fetchFromRemote)
 
   return (
@@ -72,6 +74,7 @@ const ProviderCard: FC<ProviderCardProps> = ({
                     key={method}
                     className={'h-7 text-xs shrink-0'}
                     onClick={() => onOpenModal(method)}
+                    disabled={!isCurrentWorkspaceManager}
                   >
                     <Settings01 className={`mr-[5px] w-3.5 h-3.5 ${s.icon}`} />
                     <span className='text-xs inline-flex items-center justify-center overflow-ellipsis shrink-0'>{t('common.operation.setup')}</span>
@@ -83,6 +86,7 @@ const ProviderCard: FC<ProviderCardProps> = ({
                   key={method}
                   className='px-0 h-7 text-xs'
                   onClick={() => onOpenModal(method)}
+                  disabled={!isCurrentWorkspaceManager}
                 >
                   <RiAddLine className='mr-[5px] w-3.5 h-3.5' />
                   {t('common.modelProvider.addModel')}