use backbone_auth::{ResourcePolicy, ResourceAction, PermissionGuard, ServicePermissionGuard};
use async_trait::async_trait;
use crate::application::service::ServiceLevelAgreementService;
use crate::domain::entity::ServiceLevelAgreement;
pub mod permissions {
pub const LIST: &str = "service_level_agreement:list";
pub const READ: &str = "service_level_agreement:read";
pub const CREATE: &str = "service_level_agreement:create";
pub const UPDATE: &str = "service_level_agreement:update";
pub const DELETE: &str = "service_level_agreement:delete";
pub const RESTORE: &str = "service_level_agreement:restore";
pub const TRASH: &str = "service_level_agreement:trash";
pub const EMPTY_TRASH: &str = "service_level_agreement:empty_trash";
pub const BULK_CREATE: &str = "service_level_agreement:bulk_create";
pub const UPSERT: &str = "service_level_agreement:upsert";
}
pub struct ServiceLevelAgreementPolicy;
#[async_trait]
impl ResourcePolicy<ServiceLevelAgreement> for ServiceLevelAgreementPolicy {
async fn can(
&self,
action: ResourceAction,
_entity: &ServiceLevelAgreement,
ctx: &backbone_auth::middleware::AuthContext,
) -> bool {
let required = match action {
ResourceAction::Read | ResourceAction::List => permissions::READ,
ResourceAction::Create => permissions::CREATE,
ResourceAction::Update | ResourceAction::Patch => permissions::UPDATE,
ResourceAction::Delete | ResourceAction::HardDelete => permissions::DELETE,
ResourceAction::Restore => permissions::RESTORE,
ResourceAction::Custom(_) => return false,
};
ctx.permissions.iter().any(|p| p == required)
}
}
pub type ServiceLevelAgreementGuard = PermissionGuard<ServiceLevelAgreement>;
pub type ServiceLevelAgreementServiceGuard = ServicePermissionGuard<ServiceLevelAgreement, ServiceLevelAgreementService, ServiceLevelAgreementPolicy>;