use crate::{Role, Resource, AccessControl, RateLimiter}; pub struct AccessManager {
pub users: Vec<(String, AccessControl)>, pub rate_limiter: RateLimiter, }
impl AccessManager {
pub fn new() -> Self {
AccessManager {
users: Vec::new(),
rate_limiter: RateLimiter::new(100, 60), }
}
pub fn add_user(&mut self, username: &str, role: Role) { let mut access_control = AccessControl::new();
access_control.add_role(role);
self.users.push((username.to_string(), access_control));
}
pub fn check_access(&mut self, username: &str, resource: &Resource) -> bool { if let Some((_, access_control)) = self.users.iter().find(|(user, _)| user == username) {
if self.rate_limiter.is_within_limit() { return access_control.has_access(resource);
}
}
false
}
pub fn add_role_to_user(&mut self, username: &str, role: Role) {
if let Some((_, access_control)) = self.users.iter_mut().find(|(user, _)| user == username) {
access_control.add_role(role);
}
}
}