MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / check_usage

Function check_usage

src/sql/src/rbac.rs:356–397  ·  view source on GitHub ↗

Checks if a `session` is authorized to use `resolved_ids`. If not, an error is returned.

(
    catalog: &impl SessionCatalog,
    session: &dyn SessionMetadata,
    resolved_ids: &ResolvedIds,
    item_types: &BTreeSet<CatalogItemType>,
)

Source from the content-addressed store, hash-verified

354
355/// Checks if a `session` is authorized to use `resolved_ids`. If not, an error is returned.
356pub fn check_usage(
357 catalog: &impl SessionCatalog,
358 session: &dyn SessionMetadata,
359 resolved_ids: &ResolvedIds,
360 item_types: &BTreeSet<CatalogItemType>,
361) -> Result<(), UnauthorizedError> {
362 rbac_check_preamble(catalog, session)?;
363
364 // See: doc/developer/design/20260508_restrict_to_user_objects.md
365 check_restrict_to_user_objects(catalog, session, resolved_ids)?;
366
367 // Obtain all roles that the current session is a member of.
368 let role_membership = catalog.collect_role_membership(&session.role_metadata().current_role);
369
370 // Certain statements depend on objects that haven't been created yet, like sub-sources, so we
371 // need to filter those out.
372 let existing_resolved_ids =
373 resolved_ids.retain_items(|item_id| catalog.try_get_item(item_id).is_some());
374
375 let required_privileges = generate_usage_privileges(
376 catalog,
377 &existing_resolved_ids,
378 session.role_metadata().current_role,
379 item_types,
380 )
381 .into_iter()
382 .collect();
383
384 let mut rbac_requirements = RbacRequirements::empty();
385 rbac_requirements.privileges = required_privileges;
386 let rbac_requirements = filter_requirements(catalog, session, rbac_requirements);
387 let required_privileges = rbac_requirements.privileges;
388
389 check_object_privileges(
390 catalog,
391 required_privileges,
392 role_membership,
393 session.role_metadata().current_role,
394 )?;
395
396 Ok(())
397}
398
399/// Checks if a session is authorized to execute a plan. If not, an error is returned.
400///

Callers 2

validateMethod · 0.85
handle_execute_innerMethod · 0.85

Calls 12

rbac_check_preambleFunction · 0.85
filter_requirementsFunction · 0.85
check_object_privilegesFunction · 0.85
role_metadataMethod · 0.80
retain_itemsMethod · 0.80
is_someMethod · 0.80
try_get_itemMethod · 0.45
collectMethod · 0.45
into_iterMethod · 0.45

Tested by

no test coverage detected