| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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
|