Skip to main content

backbone_catalog/application/auth/
attribute_auth.rs

1//! Auth configuration for Attribute handlers
2//!
3//! Generated by metaphor-schema. Do not edit manually.
4//!
5//! Implements `ResourcePolicy<Attribute>` with entity-specific permission
6//! string constants. Guard middleware logic lives in backbone-auth.
7
8use backbone_auth::{ResourcePolicy, ResourceAction, PermissionGuard, ServicePermissionGuard};
9use async_trait::async_trait;
10
11use crate::application::service::AttributeService;
12use crate::domain::entity::Attribute;
13
14/// Permission string constants for Attribute operations.
15pub mod permissions {
16    pub const LIST:        &str = "attribute:list";
17    pub const READ:        &str = "attribute:read";
18    pub const CREATE:      &str = "attribute:create";
19    pub const UPDATE:      &str = "attribute:update";
20    pub const DELETE:      &str = "attribute:delete";
21    pub const RESTORE:     &str = "attribute:restore";
22    pub const TRASH:       &str = "attribute:trash";
23    pub const EMPTY_TRASH: &str = "attribute:empty_trash";
24    pub const BULK_CREATE: &str = "attribute:bulk_create";
25    pub const UPSERT:      &str = "attribute:upsert";
26}
27
28/// Resource policy for Attribute — maps CRUD actions to permission strings.
29pub struct AttributePolicy;
30
31#[async_trait]
32impl ResourcePolicy<Attribute> for AttributePolicy {
33    async fn can(
34        &self,
35        action: ResourceAction,
36        _entity: &Attribute,
37        ctx: &backbone_auth::middleware::AuthContext,
38    ) -> bool {
39        let required = match action {
40            ResourceAction::Read | ResourceAction::List => permissions::READ,
41            ResourceAction::Create => permissions::CREATE,
42            ResourceAction::Update | ResourceAction::Patch => permissions::UPDATE,
43            ResourceAction::Delete | ResourceAction::HardDelete => permissions::DELETE,
44            ResourceAction::Restore => permissions::RESTORE,
45            ResourceAction::Custom(_) => return false,
46        };
47        ctx.permissions.iter().any(|p| p == required)
48    }
49}
50
51/// Permission guard for Attribute handlers.
52///
53/// Wraps `AttributeService` and checks `AttributePolicy` before delegating.
54pub type AttributeGuard = PermissionGuard<Attribute>;
55
56/// Service-integrated permission guard for Attribute (for use in generated handlers).
57pub type AttributeServiceGuard = ServicePermissionGuard<Attribute, AttributeService, AttributePolicy>;
58
59// <<< CUSTOM
60// END CUSTOM