fix(iam): user group policy and delete group (fixes #2028) (#2043)

Co-authored-by: GatewayJ <8352692332qq.com>
This commit is contained in:
GatewayJ
2026-03-02 14:19:01 +08:00
committed by GitHub
parent e3815aa101
commit 2cb8db36a5
4 changed files with 151 additions and 14 deletions
+16 -12
View File
@@ -1386,11 +1386,9 @@ where
let user_group_memberships = self.cache.user_group_memberships.load();
members.iter().for_each(|member| {
if let Some(m) = user_group_memberships.get(member) {
let mut m = m.clone();
m.insert(group.to_string());
Cache::add_or_update(&self.cache.user_group_memberships, member, &m, OffsetDateTime::now_utc());
}
let mut m = user_group_memberships.get(member).cloned().unwrap_or_default();
m.insert(group.to_string());
Cache::add_or_update(&self.cache.user_group_memberships, member, &m, OffsetDateTime::now_utc());
});
Ok(OffsetDateTime::now_utc())
@@ -1518,13 +1516,19 @@ where
}
}
let gi = self
.cache
.groups
.load()
.get(group)
.cloned()
.ok_or(Error::NoSuchGroup(group.to_string()))?;
let gi = if members.is_empty() {
// Reload from backend so we see latest members (e.g. after user was deleted elsewhere)
let mut m = HashMap::new();
self.api.load_group(group, &mut m).await?;
m.get(group).cloned().ok_or(Error::NoSuchGroup(group.to_string()))?
} else {
self.cache
.groups
.load()
.get(group)
.cloned()
.ok_or(Error::NoSuchGroup(group.to_string()))?
};
if members.is_empty() && !gi.members.is_empty() {
return Err(Error::GroupNotEmpty);
+2 -2
View File
@@ -597,7 +597,7 @@ impl Store for ObjectStore {
async fn delete_group_info(&self, name: &str) -> Result<()> {
self.delete_iam_config(get_group_info_path(name)).await.map_err(|err| {
if is_err_config_not_found(&err) {
Error::NoSuchPolicy
Error::NoSuchGroup(name.to_string())
} else {
err
}
@@ -607,7 +607,7 @@ impl Store for ObjectStore {
async fn load_group(&self, name: &str, m: &mut HashMap<String, GroupInfo>) -> Result<()> {
let u: GroupInfo = self.load_iam_config(get_group_info_path(name)).await.map_err(|err| {
if is_err_config_not_found(&err) {
Error::NoSuchPolicy
Error::NoSuchGroup(name.to_string())
} else {
err
}