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

Method validate

src/sql/src/rbac.rs:225–275  ·  view source on GitHub ↗
(
        self,
        catalog: &impl SessionCatalog,
        session: &dyn SessionMetadata,
        resolved_ids: &ResolvedIds,
    )

Source from the content-addressed store, hash-verified

223 }
224
225 fn validate(
226 self,
227 catalog: &impl SessionCatalog,
228 session: &dyn SessionMetadata,
229 resolved_ids: &ResolvedIds,
230 ) -> Result<(), UnauthorizedError> {
231 // Obtain all roles that the current session is a member of.
232 let role_membership =
233 catalog.collect_role_membership(&session.role_metadata().current_role);
234
235 check_usage(catalog, session, resolved_ids, self.item_usage)?;
236
237 // Validate that the current session has the required role membership to execute the provided
238 // plan.
239 let unheld_membership: Vec<_> = self.role_membership.difference(&role_membership).collect();
240 if !unheld_membership.is_empty() {
241 let role_names = unheld_membership
242 .into_iter()
243 .map(|role_id| {
244 // Some role references may no longer exist due to concurrent drops.
245 catalog
246 .try_get_role(role_id)
247 .map(|role| role.name().to_string())
248 .unwrap_or_else(|| role_id.to_string())
249 })
250 .collect();
251 return Err(UnauthorizedError::RoleMembership { role_names });
252 }
253
254 // Validate that the current session has the required object ownership to execute the provided
255 // plan.
256 let unheld_ownership = self
257 .ownership
258 .into_iter()
259 .filter(|ownership| !check_owner_roles(ownership, &role_membership, catalog))
260 .collect();
261 ownership_err(unheld_ownership, catalog)?;
262
263 check_object_privileges(
264 catalog,
265 self.privileges,
266 role_membership,
267 session.role_metadata().current_role,
268 )?;
269
270 if let Some(action) = self.superuser_action {
271 return Err(UnauthorizedError::Superuser { action });
272 }
273
274 Ok(())
275 }
276
277 fn filter_to_mandatory_requirements(self) -> RbacRequirements {
278 let RbacRequirements {

Callers 4

purify_create_sourceFunction · 0.45
check_planFunction · 0.45

Calls 15

check_usageFunction · 0.85
check_owner_rolesFunction · 0.85
ownership_errFunction · 0.85
check_object_privilegesFunction · 0.85
role_metadataMethod · 0.80
collectMethod · 0.45
differenceMethod · 0.45
is_emptyMethod · 0.45
mapMethod · 0.45
into_iterMethod · 0.45
try_get_roleMethod · 0.45

Tested by

no test coverage detected