use cratestack_core::{CratestackContext, CratestackError};
use crate::query::support::PolicyDb;
use crate::{ModelDescriptor, SqlValue};
use super::upsert_sql::row_passes_update_policy;
pub(super) async fn authorize_existing_row<M, PK>(
policy: PolicyDb<'_>,
descriptor: &'static ModelDescriptor<M, PK>,
conflict_columns: &[(&'static str, SqlValue)],
predicate: Option<&'static str>,
ctx: &CratestackContext,
) -> Result<(), CratestackError> {
if !row_passes_update_policy(policy, descriptor, conflict_columns, predicate, ctx).await? {
return Err(CratestackError::Forbidden(
"update policy denied this upsert".to_owned(),
));
}
Ok(())
}