Files
dify/web/app/components/plugins/plugin-page/use-permission.ts
+8 d186daa131 E-300 (#19726)
Signed-off-by: -LAN- <[email protected]>
Co-authored-by: Hash Brown <[email protected]>
Co-authored-by: crazywoola <[email protected]>
Co-authored-by: GareArc <[email protected]>
Co-authored-by: Byron.wang <[email protected]>
Co-authored-by: Joel <[email protected]>
Co-authored-by: -LAN- <[email protected]>
Co-authored-by: Garfield Dai <[email protected]>
Co-authored-by: KVOJJJin <[email protected]>
Co-authored-by: Alexi.F <[email protected]>
Co-authored-by: Xiyuan Chen <[email protected]>
Co-authored-by: kautsar_masuara <[email protected]>
Co-authored-by: achmad-kautsar <[email protected]>
Co-authored-by: Xin Zhang <[email protected]>
Co-authored-by: kelvintsim <[email protected]>
Co-authored-by: zxhlyh <[email protected]>
Co-authored-by: Zixuan Cheng <[email protected]>
2025-05-20 12:07:50 +08:00

62 lines
1.9 KiB
TypeScript

import { PermissionType } from '../types'
import { useAppContext } from '@/context/app-context'
import Toast from '../../base/toast'
import { useTranslation } from 'react-i18next'
import { useInvalidatePermissions, useMutationPermissions, usePermissions } from '@/service/use-plugins'
import { useMemo } from 'react'
import { useGlobalPublicStore } from '@/context/global-public-context'
const hasPermission = (permission: PermissionType | undefined, isAdmin: boolean) => {
if (!permission)
return false
if (permission === PermissionType.noOne)
return false
if (permission === PermissionType.everyone)
return true
return isAdmin
}
const usePermission = () => {
const { t } = useTranslation()
const { isCurrentWorkspaceManager, isCurrentWorkspaceOwner } = useAppContext()
const { data: permissions } = usePermissions()
const invalidatePermissions = useInvalidatePermissions()
const { mutate: updatePermission, isPending: isUpdatePending } = useMutationPermissions({
onSuccess: () => {
invalidatePermissions()
Toast.notify({
type: 'success',
message: t('common.api.actionSuccess'),
})
},
})
const isAdmin = isCurrentWorkspaceManager || isCurrentWorkspaceOwner
return {
canManagement: hasPermission(permissions?.install_permission, isAdmin),
canDebugger: hasPermission(permissions?.debug_permission, isAdmin),
canSetPermissions: isAdmin,
permissions,
setPermissions: updatePermission,
isUpdatePending,
}
}
export const useCanInstallPluginFromMarketplace = () => {
const { enable_marketplace } = useGlobalPublicStore(s => s.systemFeatures)
const { canManagement } = usePermission()
const canInstallPluginFromMarketplace = useMemo(() => {
return enable_marketplace && canManagement
}, [enable_marketplace, canManagement])
return {
canInstallPluginFromMarketplace,
}
}
export default usePermission