Changeset View
Changeset View
Standalone View
Standalone View
js_modules/dagit/packages/core/src/app/Permissions.tsx
Show All 15 Lines | export type PermissionsFromJSON = { | ||||
delete_pipeline_run?: boolean; | delete_pipeline_run?: boolean; | ||||
reload_repository_location?: boolean; | reload_repository_location?: boolean; | ||||
reload_workspace?: boolean; | reload_workspace?: boolean; | ||||
wipe_assets?: boolean; | wipe_assets?: boolean; | ||||
launch_partition_backfill?: boolean; | launch_partition_backfill?: boolean; | ||||
cancel_partition_backfill?: boolean; | cancel_partition_backfill?: boolean; | ||||
}; | }; | ||||
// todo dish: Delete this, we don't want it anymore. | |||||
export const PERMISSIONS_ALLOW_ALL: PermissionsFromJSON = { | |||||
launch_pipeline_execution: true, | |||||
launch_pipeline_reexecution: true, | |||||
reconcile_scheduler_state: true, | |||||
start_schedule: true, | |||||
stop_running_schedule: true, | |||||
start_sensor: true, | |||||
stop_sensor: true, | |||||
terminate_pipeline_execution: true, | |||||
delete_pipeline_run: true, | |||||
reload_repository_location: true, | |||||
reload_workspace: true, | |||||
wipe_assets: true, | |||||
launch_partition_backfill: true, | |||||
cancel_partition_backfill: true, | |||||
}; | |||||
export const extractPermissions = (permissions: PermissionFragment[]) => { | export const extractPermissions = (permissions: PermissionFragment[]) => { | ||||
const permsMap: PermissionsFromJSON = {}; | const permsMap: PermissionsFromJSON = {}; | ||||
for (const item of permissions) { | for (const item of permissions) { | ||||
permsMap[item.permission] = item.value; | permsMap[item.permission] = item.value; | ||||
} | } | ||||
return { | return { | ||||
canLaunchPipelineExecution: !!permsMap.launch_pipeline_execution, | canLaunchPipelineExecution: !!permsMap.launch_pipeline_execution, | ||||
Show All 12 Lines | return { | ||||
canCancelPartitionBackfill: !!permsMap.cancel_partition_backfill, | canCancelPartitionBackfill: !!permsMap.cancel_partition_backfill, | ||||
}; | }; | ||||
}; | }; | ||||
export type PermissionsMap = ReturnType<typeof extractPermissions>; | export type PermissionsMap = ReturnType<typeof extractPermissions>; | ||||
export const DISABLED_MESSAGE = 'Disabled by your administrator'; | export const DISABLED_MESSAGE = 'Disabled by your administrator'; | ||||
type PermissionsContextValue = { | export const PermissionsContext = React.createContext<PermissionFragment[]>([]); | ||||
rawPermissions: PermissionFragment[]; | |||||
permissionsMap: PermissionsMap; | |||||
}; | |||||
export const PermissionsContext = React.createContext<PermissionsContextValue>({ | |||||
rawPermissions: [], | |||||
permissionsMap: {} as PermissionsMap, | |||||
}); | |||||
export const PermissionsProvider: React.FC = (props) => { | export const PermissionsProvider: React.FC = (props) => { | ||||
const {data} = useQuery<PermissionsQuery>(PERMISSIONS_QUERY); | const {data} = useQuery<PermissionsQuery>(PERMISSIONS_QUERY); | ||||
const value = React.useMemo(() => { | const value = React.useMemo(() => data?.permissions || [], [data]); | ||||
const rawPermissions = data?.permissions || []; | |||||
const permissionsMap = extractPermissions(rawPermissions); | |||||
return { | |||||
rawPermissions, | |||||
permissionsMap, | |||||
}; | |||||
}, [data]); | |||||
return <PermissionsContext.Provider value={value}>{props.children}</PermissionsContext.Provider>; | return <PermissionsContext.Provider value={value}>{props.children}</PermissionsContext.Provider>; | ||||
}; | }; | ||||
export const usePermissions = () => { | export const usePermissions = () => { | ||||
const {permissionsMap} = React.useContext(PermissionsContext); | const rawPermissions = React.useContext(PermissionsContext); | ||||
return permissionsMap; | return React.useMemo(() => extractPermissions(rawPermissions), [rawPermissions]); | ||||
}; | }; | ||||
const PERMISSIONS_QUERY = gql` | const PERMISSIONS_QUERY = gql` | ||||
query PermissionsQuery { | query PermissionsQuery { | ||||
permissions { | permissions { | ||||
...PermissionFragment | ...PermissionFragment | ||||
} | } | ||||
} | } | ||||
fragment PermissionFragment on GraphenePermission { | fragment PermissionFragment on GraphenePermission { | ||||
permission | permission | ||||
value | value | ||||
} | } | ||||
`; | `; |