dify/web/app/components/plugins/plugin-page/use-permission.ts

46 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-10-15 19:20:59 +08:00
import { PermissionType } from '../types'
import { useAppContext } from '@/context/app-context'
2024-10-29 17:18:23 +08:00
import Toast from '../../base/toast'
import { useTranslation } from 'react-i18next'
2024-11-08 16:11:50 +08:00
import { useInvalidatePermissions, useMutationPermissions, usePermissions } from '@/service/use-plugins'
2024-10-15 19:20:59 +08:00
2024-11-08 16:11:50 +08:00
const hasPermission = (permission: PermissionType | undefined, isAdmin: boolean) => {
if (!permission)
return false
2024-10-15 19:20:59 +08:00
if (permission === PermissionType.noOne)
return false
if (permission === PermissionType.everyone)
return true
return isAdmin
}
const usePermission = () => {
2024-10-29 17:18:23 +08:00
const { t } = useTranslation()
2024-10-15 19:20:59 +08:00
const { isCurrentWorkspaceManager, isCurrentWorkspaceOwner } = useAppContext()
2024-11-08 16:11:50 +08:00
const { data: permissions } = usePermissions()
const invalidatePermissions = useInvalidatePermissions()
const { mutate: updatePermission, isPending: isUpdatePending } = useMutationPermissions({
onSuccess: () => {
invalidatePermissions()
Toast.notify({
type: 'success',
message: t('common.api.actionSuccess'),
})
},
})
2024-10-15 19:20:59 +08:00
const isAdmin = isCurrentWorkspaceManager || isCurrentWorkspaceOwner
return {
2024-11-08 16:11:50 +08:00
canManagement: hasPermission(permissions?.install_permission, isAdmin),
canDebugger: hasPermission(permissions?.debug_permission, isAdmin),
2024-10-15 19:20:59 +08:00
canSetPermissions: isAdmin,
permissions,
2024-10-29 17:18:23 +08:00
setPermissions: updatePermission,
2024-11-08 16:11:50 +08:00
isUpdatePending,
2024-10-15 19:20:59 +08:00
}
}
export default usePermission