From 852b7f8e6095588e18fc3dd0d2b7f4fcb7f15de1 Mon Sep 17 00:00:00 2001 From: H-Chris233 Date: Tue, 4 Nov 2025 03:35:31 +0000 Subject: [PATCH] check before alloc --- src/rbac/default_role_manager.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/rbac/default_role_manager.rs b/src/rbac/default_role_manager.rs index 233d010b..a81a1fa1 100644 --- a/src/rbac/default_role_manager.rs +++ b/src/rbac/default_role_manager.rs @@ -173,16 +173,15 @@ impl DefaultRoleManager { // return the list of affected domain names (immutable) to avoid nested // mutable borrows when performing operations across domains fn affected_domain_names(&self, domain: &str) -> Vec { - let mut res = Vec::new(); - if let Some(domain_matching_fn) = self.domain_matching_fn { - let keys: Vec = self.all_domains.keys().cloned().collect(); - for d in keys { - if d != domain && (domain_matching_fn)(&d, domain) { - res.push(d); - } - } + if let Some(matcher) = self.domain_matching_fn { + self.all_domains + .keys() + .filter(|d| *d != domain && matcher(d, domain)) + .cloned() + .collect() + } else { + Vec::new() } - res } // copy all role links and nodes from `src_domain` graph into `dst_domain` graph