This is an automated email from the ASF dual-hosted git repository.

hsluoyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/casbin-rs.git


The following commit(s) were added to refs/heads/master by this push:
     new ec23250  fix: skip role link updates for rejected grouping mutations
ec23250 is described below

commit ec23250c21a3e30cf1c7c863bbdf1c9b0e21ca98
Author: Yang Luo <[email protected]>
AuthorDate: Fri Oct 9 22:19:50 2026 +0800

    fix: skip role link updates for rejected grouping mutations
---
 src/internal_api.rs              | 25 ++++++++++++++++++++-----
 src/rbac/default_role_manager.rs |  4 ++++
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/internal_api.rs b/src/internal_api.rs
index b3dde4b..1d1ada5 100644
--- a/src/internal_api.rs
+++ b/src/internal_api.rs
@@ -118,7 +118,10 @@ where
                 self.emit(Event::ClearCache, EventData::ClearCache);
             }
         }
-        if sec != "g" || !self.has_auto_build_role_links_enabled() {
+        if sec != "g"
+            || !rule_added
+            || !self.has_auto_build_role_links_enabled()
+        {
             return Ok(rule_added);
         }
         #[cfg(not(feature = "incremental"))]
@@ -202,7 +205,10 @@ where
                 self.emit(Event::ClearCache, EventData::ClearCache);
             }
         }
-        if sec != "g" || !self.has_auto_build_role_links_enabled() {
+        if sec != "g"
+            || !rules_added
+            || !self.has_auto_build_role_links_enabled()
+        {
             return Ok(rules_added);
         }
         #[cfg(not(feature = "incremental"))]
@@ -286,7 +292,10 @@ where
                 self.emit(Event::ClearCache, EventData::ClearCache);
             }
         }
-        if sec != "g" || !self.has_auto_build_role_links_enabled() {
+        if sec != "g"
+            || !rule_removed
+            || !self.has_auto_build_role_links_enabled()
+        {
             return Ok(rule_removed);
         }
         #[cfg(not(feature = "incremental"))]
@@ -370,7 +379,10 @@ where
                 self.emit(Event::ClearCache, EventData::ClearCache);
             }
         }
-        if sec != "g" || !self.has_auto_build_role_links_enabled() {
+        if sec != "g"
+            || !rules_removed
+            || !self.has_auto_build_role_links_enabled()
+        {
             return Ok(rules_removed);
         }
         #[cfg(not(feature = "incremental"))]
@@ -439,7 +451,10 @@ where
                 self.emit(Event::ClearCache, EventData::ClearCache);
             }
         }
-        if sec != "g" || !self.has_auto_build_role_links_enabled() {
+        if sec != "g"
+            || !rules_removed
+            || !self.has_auto_build_role_links_enabled()
+        {
             return Ok((rules_removed, rules));
         }
         #[cfg(not(feature = "incremental"))]
diff --git a/src/rbac/default_role_manager.rs b/src/rbac/default_role_manager.rs
index a81a1fa..23f096f 100644
--- a/src/rbac/default_role_manager.rs
+++ b/src/rbac/default_role_manager.rs
@@ -379,6 +379,10 @@ impl RoleManager for DefaultRoleManager {
         name2: &str,
         domain: Option<&str>,
     ) -> Result<()> {
+        if name1 == name2 {
+            return Ok(());
+        }
+
         if !self.domain_has_role(name1, domain)
             || !self.domain_has_role(name2, domain)
         {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to