use pib_service_api_permissions::{Method, Permissions, Resource};
use uuid::Uuid;
use crate::Error;
#[async_trait::async_trait]
pub(crate) trait EnforcePermissions: Permissions {
async fn enforce(&self, resource: Resource, method: Method, user_id: Uuid)
-> Result<(), Error>;
}
#[async_trait::async_trait]
impl<T: ?Sized + Permissions> EnforcePermissions for T {
async fn enforce(
&self,
resource: Resource,
method: Method,
user_id: Uuid,
) -> Result<(), Error> {
let admission = self.request_permission(resource, method, user_id).await?;
if admission.is_denied() {
return Err(Error::Forbidden);
}
Ok(())
}
}