access_control/
access_control.rs1use relmath::{BinaryRelation, UnaryRelation};
4
5fn main() {
6 let user_role = BinaryRelation::from_pairs([
7 ("ann", "admin"),
8 ("bob", "analyst"),
9 ("bob", "reviewer"),
10 ("cara", "guest"),
11 ]);
12
13 let role_permission = BinaryRelation::from_pairs([
14 ("admin", "read"),
15 ("admin", "write"),
16 ("admin", "deploy"),
17 ("analyst", "read"),
18 ("reviewer", "approve"),
19 ("guest", "read"),
20 ]);
21
22 let effective_permission = user_role.compose(&role_permission);
23 let bob = UnaryRelation::singleton("bob");
24 let bob_permissions = effective_permission.image(&bob);
25
26 assert!(effective_permission.contains(&"ann", &"deploy"));
27 assert!(bob_permissions.contains(&"approve"));
28 assert!(bob_permissions.contains(&"read"));
29
30 println!(
31 "effective permissions for bob: {:?}",
32 bob_permissions.to_vec()
33 );
34}