Quick Start
This guide will get you up and running with BAC Rules in 5 minutes.
acls-rs Quick Start
Basic Permission Usage
#![allow(unused)]
fn main() {
use acls_rs::prelude::*;
// Create a subject (user)
let mut alice = Subject::new("alice");
// Grant permissions
let read_file = AtomicPermission::new("file", "read");
let write_file = AtomicPermission::new("file", "write");
alice.grant(read_file);
alice.grant(write_file);
// Check permissions
assert!(alice.has_permission(&AtomicPermission::new("file", "read")));
assert!(alice.has_permission(&AtomicPermission::new("file", "write")));
}
RBAC Example
#![allow(unused)]
fn main() {
use acls_rs::prelude::*;
// Create roles
let mut developer_role = Role::new("developer", GrantDenialPair::empty());
developer_role.grant(AtomicPermission::new("code", "read"));
developer_role.grant(AtomicPermission::new("code", "write"));
let mut admin_role = Role::new("admin", GrantDenialPair::empty());
admin_role.grant(AtomicPermission::new("system", "admin"));
// Create RBAC policy
let mut policy = RbacPolicy::new();
policy.add_role(developer_role);
policy.add_role(admin_role);
// Assign roles to user
let mut user = Subject::new("bob");
user.roles.push("developer".to_string());
// Apply policy
policy.apply_to(&mut user);
// Check permissions
assert!(user.has_permission(&AtomicPermission::new("code", "read")));
}
hbac-rs Quick Start
Simple HBAC Rule
#![allow(unused)]
fn main() {
use hbac_rs::prelude::*;
use acls_rs::Subject;
// Create an HBAC rule
let ssh_rule = HbacRule::builder("allow_ssh")
.user_category_all() // All users
.host_category_all() // All hosts
.service("sshd") // Only SSH service
.enabled(true)
.build()
.unwrap();
// Create a policy and add rule
let mut policy = HbacPolicy::new();
policy.add_rule(ssh_rule);
// Create a request
let user = Subject::new("alice");
let request = HbacRequest::new(user, "server1.example.com", "sshd");
// Evaluate
let result = policy.evaluate(&request);
assert!(result.is_allowed());
}
Group-Based Rule
#![allow(unused)]
fn main() {
use hbac_rs::prelude::*;
use acls_rs::Subject;
// Create rule for admin group
let admin_rule = HbacRule::builder("admins_all_access")
.user_group("admins")
.host_category_all()
.service_category_all()
.enabled(true)
.build()
.unwrap();
let mut policy = HbacPolicy::new();
policy.add_rule(admin_rule);
// Create user with group membership
let mut alice = Subject::new("alice");
alice.roles.push("admins".to_string());
let request = HbacRequest::new(alice, "server1.example.com", "httpd");
let result = policy.evaluate(&request);
assert!(result.is_allowed());
}
abac-rs Quick Start
Simple ABAC Rule
#![allow(unused)]
fn main() {
use abac_rs::prelude::*;
use acls_rs::Subject;
// Create an ABAC rule
let rule = AbacRule::builder("allow_admin_access")
.allow()
.add_condition("role", "admin")
.add_condition("department", "engineering")
.enabled(true)
.build()
.unwrap();
// Create a policy and add rule
let mut policy = AbacPolicy::new();
policy.add_rule(rule);
// Create a request with attributes
let mut request = AbacRequest::new();
request.set_attribute("role", AttributeValue::String("admin".to_string()));
request.set_attribute("department", AttributeValue::String("engineering".to_string()));
// Evaluate
let result = policy.evaluate(&request);
assert!(result.is_allowed());
}
Multi-Type Attributes
#![allow(unused)]
fn main() {
use abac_rs::prelude::*;
use std::net::IpAddr;
// Create rule with IP address matching
let rule = AbacRule::builder("allow_from_trusted_network")
.allow()
.add_condition("source_ip", "10.0.0.0/8")
.add_condition("port", 443)
.enabled(true)
.build()
.unwrap();
let mut policy = AbacPolicy::new();
policy.add_rule(rule);
// Create request with typed attributes
let mut request = AbacRequest::new();
request.set_attribute("source_ip", AttributeValue::IpAddr("10.1.2.3".parse().unwrap()));
request.set_attribute("port", AttributeValue::Integer(443));
let result = policy.evaluate(&request);
assert!(result.is_allowed());
}
Performance Testing Quick Start
Generate Test Fixtures
# Generate 1000 HBAC rules with SSSD production distribution
bac-perf generate --count 1000 --output hbac_1k_prod --distribution sssd-prod
# Generate 100 rules for development
bac-perf generate --count 100 --output hbac_100_dev --distribution dev
Run Benchmarks
# Run all scenarios with caching
bac-perf bench --fixture hbac_1k_prod --scenario all --cache
# Run single latency test
bac-perf bench --fixture hbac_100_dev --scenario single-latency
# Save results as JSON
bac-perf bench --fixture hbac_1k_prod --scenario throughput \\
--cache --format json --output results/
List Fixtures
# List all fixtures
bac-perf list
# Show detailed information
bac-perf list --verbose
Next Steps
- Examples - More detailed examples
- acls-rs User Guide - Full acls-rs documentation
- hbac-rs User Guide - Full hbac-rs documentation
- abac-rs User Guide - Full abac-rs documentation
- Performance Testing Guide - Complete perf-testing documentation