Skip to content

Commit e2cdad7

Browse files
committed
bugfix
- user sessions get removed upon modifying group's roles
1 parent 8f7a8ff commit e2cdad7

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

src/rbac/user.rs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use crate::{
3131
rbac::{InvalidUserGroupError, RBACError},
3232
},
3333
parseable::PARSEABLE,
34-
rbac::map::{read_user_groups, roles, users},
34+
rbac::map::{mut_sessions, read_user_groups, roles, users},
3535
};
3636

3737
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
@@ -266,11 +266,19 @@ impl UserGroup {
266266

267267
pub fn add_roles(&mut self, roles: HashSet<String>) -> Result<(), RBACError> {
268268
self.roles.extend(roles);
269+
// also refresh all user sessions
270+
for username in &self.users {
271+
mut_sessions().remove_user(username);
272+
}
269273
Ok(())
270274
}
271275

272276
pub fn add_users(&mut self, users: HashSet<String>) -> Result<(), RBACError> {
273-
self.users.extend(users);
277+
self.users.extend(users.clone());
278+
// also refresh all user sessions
279+
for username in &users {
280+
mut_sessions().remove_user(username);
281+
}
274282
Ok(())
275283
}
276284

@@ -283,6 +291,10 @@ impl UserGroup {
283291
}
284292
self.roles.clone_from(&new_roles);
285293

294+
// also refresh all user sessions
295+
for username in &self.users {
296+
mut_sessions().remove_user(username);
297+
}
286298
Ok(())
287299
}
288300

@@ -293,6 +305,10 @@ impl UserGroup {
293305
if old_users.eq(&new_users) {
294306
return Ok(());
295307
}
308+
// also refresh all user sessions
309+
for username in &users {
310+
mut_sessions().remove_user(username);
311+
}
296312
self.users.clone_from(&new_users);
297313

298314
Ok(())
@@ -305,21 +321,4 @@ impl UserGroup {
305321
put_metadata(&metadata).await?;
306322
Ok(())
307323
}
308-
309-
// // are these methods even needed??
310-
// pub fn group_name(&self) -> String {
311-
// self.name.clone()
312-
// }
313-
314-
// pub fn group_id(&self) -> Ulid {
315-
// self.id
316-
// }
317-
318-
// pub fn group_roles(&self) -> HashSet<String> {
319-
// self.roles.clone()
320-
// }
321-
322-
// pub fn group_users(&self) -> HashSet<String> {
323-
// self.users.clone()
324-
// }
325324
}

0 commit comments

Comments
 (0)