backbone-pos 0.5.33

Point of sale — cashier session, ticket + multi-tender; orchestrates billing (revenue) + payment (settlement), posts no GL directly
Documentation
//! Auth configuration for PosCashMovement handlers
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! Implements `ResourcePolicy<PosCashMovement>` with entity-specific permission
//! string constants. Guard middleware logic lives in backbone-auth.

use backbone_auth::{ResourcePolicy, ResourceAction, PermissionGuard, ServicePermissionGuard};
use async_trait::async_trait;

use crate::application::service::PosCashMovementService;
use crate::domain::entity::PosCashMovement;

/// Permission string constants for PosCashMovement operations.
pub mod permissions {
    pub const LIST:        &str = "pos_cash_movement:list";
    pub const READ:        &str = "pos_cash_movement:read";
    pub const CREATE:      &str = "pos_cash_movement:create";
    pub const UPDATE:      &str = "pos_cash_movement:update";
    pub const DELETE:      &str = "pos_cash_movement:delete";
    pub const RESTORE:     &str = "pos_cash_movement:restore";
    pub const TRASH:       &str = "pos_cash_movement:trash";
    pub const EMPTY_TRASH: &str = "pos_cash_movement:empty_trash";
    pub const BULK_CREATE: &str = "pos_cash_movement:bulk_create";
    pub const UPSERT:      &str = "pos_cash_movement:upsert";
}

/// Resource policy for PosCashMovement — maps CRUD actions to permission strings.
pub struct PosCashMovementPolicy;

#[async_trait]
impl ResourcePolicy<PosCashMovement> for PosCashMovementPolicy {
    async fn can(
        &self,
        action: ResourceAction,
        _entity: &PosCashMovement,
        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)
    }
}

/// Permission guard for PosCashMovement handlers.
///
/// Wraps `PosCashMovementService` and checks `PosCashMovementPolicy` before delegating.
pub type PosCashMovementGuard = PermissionGuard<PosCashMovement>;

/// Service-integrated permission guard for PosCashMovement (for use in generated handlers).
pub type PosCashMovementServiceGuard = ServicePermissionGuard<PosCashMovement, PosCashMovementService, PosCashMovementPolicy>;

// <<< CUSTOM
// END CUSTOM