backbone_catalog/application/auth/
attribute_value_auth.rs1use backbone_auth::{ResourcePolicy, ResourceAction, PermissionGuard, ServicePermissionGuard};
9use async_trait::async_trait;
10
11use crate::application::service::AttributeValueService;
12use crate::domain::entity::AttributeValue;
13
14pub mod permissions {
16 pub const LIST: &str = "attribute_value:list";
17 pub const READ: &str = "attribute_value:read";
18 pub const CREATE: &str = "attribute_value:create";
19 pub const UPDATE: &str = "attribute_value:update";
20 pub const DELETE: &str = "attribute_value:delete";
21 pub const RESTORE: &str = "attribute_value:restore";
22 pub const TRASH: &str = "attribute_value:trash";
23 pub const EMPTY_TRASH: &str = "attribute_value:empty_trash";
24 pub const BULK_CREATE: &str = "attribute_value:bulk_create";
25 pub const UPSERT: &str = "attribute_value:upsert";
26}
27
28pub struct AttributeValuePolicy;
30
31#[async_trait]
32impl ResourcePolicy<AttributeValue> for AttributeValuePolicy {
33 async fn can(
34 &self,
35 action: ResourceAction,
36 _entity: &AttributeValue,
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
51pub type AttributeValueGuard = PermissionGuard<AttributeValue>;
55
56pub type AttributeValueServiceGuard = ServicePermissionGuard<AttributeValue, AttributeValueService, AttributeValuePolicy>;
58
59