pub struct PolicyBuilder { /* private fields */ }Implementations§
Source§impl PolicyBuilder
impl PolicyBuilder
Sourcepub fn target(self, target: Target) -> Self
pub fn target(self, target: Target) -> Self
Examples found in repository?
examples/basic.rs (line 10)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let policy = Policy::builder("document-read")
10 .target(Target::action("document:read"))
11 .condition(Condition::equals("resource.owner_id", "actor.id"))
12 .effect(Effect::Permit)
13 .build()?;
14
15 let engine = PolicyEngine::from_policies([policy]);
16
17 let request = Request::new()
18 .action("document:read")
19 .actor_attr("id", "user-123")
20 .resource_attr("owner_id", "user-123");
21
22 let decision = engine.evaluate(&request)?;
23 println!("decision: {:?}", decision);
24 assert_eq!(decision, Decision::Permit);
25
26 Ok(())
27}More examples
examples/default_deny.rs (line 11)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 // Engine denies by default when no policy matches.
10 let engine = PolicyEngine::from_policies([Policy::builder("allow-write")
11 .target(Target::action("document:write"))
12 .effect(Effect::Permit)
13 .build()?]);
14
15 let read_request = Request::new()
16 .action("document:read")
17 .actor_attr("id", "user-123");
18
19 let decision = engine.evaluate(&read_request)?;
20 println!("decision: {:?}", decision);
21 assert_eq!(decision, Decision::Deny);
22
23 // Override the default effect to allow unmatched requests.
24 let permissive_engine = PolicyEngine::from_policies(Vec::<Policy>::new())
25 .with_default_effect(Effect::Permit);
26
27 let read_request = Request::new().action("document:read");
28 let decision = permissive_engine.evaluate(&read_request)?;
29 println!("permissive decision: {:?}", decision);
30 assert_eq!(decision, Decision::Permit);
31
32 Ok(())
33}Sourcepub fn condition(self, condition: Condition) -> Self
pub fn condition(self, condition: Condition) -> Self
Examples found in repository?
examples/basic.rs (line 11)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let policy = Policy::builder("document-read")
10 .target(Target::action("document:read"))
11 .condition(Condition::equals("resource.owner_id", "actor.id"))
12 .effect(Effect::Permit)
13 .build()?;
14
15 let engine = PolicyEngine::from_policies([policy]);
16
17 let request = Request::new()
18 .action("document:read")
19 .actor_attr("id", "user-123")
20 .resource_attr("owner_id", "user-123");
21
22 let decision = engine.evaluate(&request)?;
23 println!("decision: {:?}", decision);
24 assert_eq!(decision, Decision::Permit);
25
26 Ok(())
27}Sourcepub fn effect(self, effect: Effect) -> Self
pub fn effect(self, effect: Effect) -> Self
Examples found in repository?
examples/basic.rs (line 12)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let policy = Policy::builder("document-read")
10 .target(Target::action("document:read"))
11 .condition(Condition::equals("resource.owner_id", "actor.id"))
12 .effect(Effect::Permit)
13 .build()?;
14
15 let engine = PolicyEngine::from_policies([policy]);
16
17 let request = Request::new()
18 .action("document:read")
19 .actor_attr("id", "user-123")
20 .resource_attr("owner_id", "user-123");
21
22 let decision = engine.evaluate(&request)?;
23 println!("decision: {:?}", decision);
24 assert_eq!(decision, Decision::Permit);
25
26 Ok(())
27}More examples
examples/default_deny.rs (line 12)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 // Engine denies by default when no policy matches.
10 let engine = PolicyEngine::from_policies([Policy::builder("allow-write")
11 .target(Target::action("document:write"))
12 .effect(Effect::Permit)
13 .build()?]);
14
15 let read_request = Request::new()
16 .action("document:read")
17 .actor_attr("id", "user-123");
18
19 let decision = engine.evaluate(&read_request)?;
20 println!("decision: {:?}", decision);
21 assert_eq!(decision, Decision::Deny);
22
23 // Override the default effect to allow unmatched requests.
24 let permissive_engine = PolicyEngine::from_policies(Vec::<Policy>::new())
25 .with_default_effect(Effect::Permit);
26
27 let read_request = Request::new().action("document:read");
28 let decision = permissive_engine.evaluate(&read_request)?;
29 println!("permissive decision: {:?}", decision);
30 assert_eq!(decision, Decision::Permit);
31
32 Ok(())
33}Sourcepub fn build(self) -> Result<Policy>
pub fn build(self) -> Result<Policy>
Examples found in repository?
examples/basic.rs (line 13)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let policy = Policy::builder("document-read")
10 .target(Target::action("document:read"))
11 .condition(Condition::equals("resource.owner_id", "actor.id"))
12 .effect(Effect::Permit)
13 .build()?;
14
15 let engine = PolicyEngine::from_policies([policy]);
16
17 let request = Request::new()
18 .action("document:read")
19 .actor_attr("id", "user-123")
20 .resource_attr("owner_id", "user-123");
21
22 let decision = engine.evaluate(&request)?;
23 println!("decision: {:?}", decision);
24 assert_eq!(decision, Decision::Permit);
25
26 Ok(())
27}More examples
examples/default_deny.rs (line 13)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 // Engine denies by default when no policy matches.
10 let engine = PolicyEngine::from_policies([Policy::builder("allow-write")
11 .target(Target::action("document:write"))
12 .effect(Effect::Permit)
13 .build()?]);
14
15 let read_request = Request::new()
16 .action("document:read")
17 .actor_attr("id", "user-123");
18
19 let decision = engine.evaluate(&read_request)?;
20 println!("decision: {:?}", decision);
21 assert_eq!(decision, Decision::Deny);
22
23 // Override the default effect to allow unmatched requests.
24 let permissive_engine = PolicyEngine::from_policies(Vec::<Policy>::new())
25 .with_default_effect(Effect::Permit);
26
27 let read_request = Request::new().action("document:read");
28 let decision = permissive_engine.evaluate(&read_request)?;
29 println!("permissive decision: {:?}", decision);
30 assert_eq!(decision, Decision::Permit);
31
32 Ok(())
33}Auto Trait Implementations§
impl Freeze for PolicyBuilder
impl RefUnwindSafe for PolicyBuilder
impl Send for PolicyBuilder
impl Sync for PolicyBuilder
impl Unpin for PolicyBuilder
impl UnwindSafe for PolicyBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more