mirror of
https://github.com/langgenius/dify.git
synced 2026-05-23 02:18:23 +08:00
71 lines
2.5 KiB
TypeScript
71 lines
2.5 KiB
TypeScript
import { toast } from '@langgenius/dify-ui/toast'
|
|
import { useSuspenseQuery } from '@tanstack/react-query'
|
|
import { useMemo } from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import { useAppContext } from '@/context/app-context'
|
|
import { systemFeaturesQueryOptions } from '@/service/system-features'
|
|
import { useInvalidateReferenceSettings, useMutationReferenceSettings, useReferenceSettings } from '@/service/use-plugins'
|
|
import { hasPermission } from '@/utils/permission'
|
|
import { PermissionType } from '../types'
|
|
|
|
const hasPluginPermission = (permission: PermissionType | undefined, isAdmin: boolean) => {
|
|
if (!permission)
|
|
return false
|
|
|
|
if (permission === PermissionType.noOne)
|
|
return false
|
|
|
|
if (permission === PermissionType.everyone)
|
|
return true
|
|
|
|
return isAdmin
|
|
}
|
|
|
|
const useReferenceSetting = () => {
|
|
const { t } = useTranslation()
|
|
const { isCurrentWorkspaceManager, isCurrentWorkspaceOwner, workspacePermissionKeys } = useAppContext()
|
|
const { data } = useReferenceSettings()
|
|
|
|
const { permission: permissions } = data || {}
|
|
const invalidateReferenceSettings = useInvalidateReferenceSettings()
|
|
const { mutate: updateReferenceSetting, isPending: isUpdatePending } = useMutationReferenceSettings({
|
|
onSuccess: () => {
|
|
invalidateReferenceSettings()
|
|
toast.success(t('api.actionSuccess', { ns: 'common' }))
|
|
},
|
|
})
|
|
const isAdmin = isCurrentWorkspaceManager || isCurrentWorkspaceOwner
|
|
|
|
const canInstall = hasPermission(workspacePermissionKeys, ['plugin.install', 'plugin.manage'])
|
|
const canUninstall = hasPermission(workspacePermissionKeys, ['plugin.uninstall', 'plugin.manage'])
|
|
const canSetPreferences = hasPermission(workspacePermissionKeys, ['plugin.preference.manage'])
|
|
|
|
return {
|
|
referenceSetting: data,
|
|
setReferenceSettings: updateReferenceSetting,
|
|
canInstall: hasPluginPermission(permissions?.install_permission, canInstall),
|
|
canUninstall,
|
|
canDebugger: hasPluginPermission(permissions?.debug_permission, isAdmin),
|
|
canSetPreferences,
|
|
isUpdatePending,
|
|
}
|
|
}
|
|
|
|
export const useCanInstallPluginFromMarketplace = () => {
|
|
const { data: enable_marketplace } = useSuspenseQuery({
|
|
...systemFeaturesQueryOptions(),
|
|
select: s => s.enable_marketplace,
|
|
})
|
|
const { canInstall } = useReferenceSetting()
|
|
|
|
const canInstallPluginFromMarketplace = useMemo(() => {
|
|
return enable_marketplace && canInstall
|
|
}, [enable_marketplace, canInstall])
|
|
|
|
return {
|
|
canInstallPluginFromMarketplace,
|
|
}
|
|
}
|
|
|
|
export default useReferenceSetting
|