pib-service-api 0.11.0

pib-service edit API
Documentation
// SPDX-FileCopyrightText: Politik im Blick developers
// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
//
// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2

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(())
    }
}