Skip to content

Commit

Permalink
fix(user_roles): Send only same and below Entity Level Users in List …
Browse files Browse the repository at this point in the history
…Users API (#6147)
  • Loading branch information
ThisIsMani authored Sep 29, 2024
1 parent 34a1e2a commit 3e3c326
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 23 deletions.
10 changes: 10 additions & 0 deletions crates/router/src/core/user_role.rs
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,16 @@ pub async fn list_users_in_lineage(
}
};

// This filtering is needed because for org level users in V1, merchant_id is present.
// Due to this, we get org level users in merchant level users list.
let user_roles_set = user_roles_set
.into_iter()
.filter_map(|user_role| {
let (_entity_id, entity_type) = user_role.get_entity_id_and_type()?;
(entity_type <= requestor_role_info.get_entity_type()).then_some(user_role)
})
.collect::<HashSet<_>>();

let mut email_map = state
.global_store
.find_users_by_user_ids(
Expand Down
34 changes: 11 additions & 23 deletions crates/router/src/utils/user_role.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::collections::HashSet;
use std::{cmp, collections::HashSet};

use api_models::user_role as user_role_api;
use common_enums::{EntityType, PermissionGroup};
Expand Down Expand Up @@ -418,28 +418,16 @@ pub fn get_min_entity(
user_entity: EntityType,
filter_entity: Option<EntityType>,
) -> UserResult<EntityType> {
match (user_entity, filter_entity) {
(EntityType::Organization, None)
| (EntityType::Organization, Some(EntityType::Organization)) => {
Ok(EntityType::Organization)
}
let Some(filter_entity) = filter_entity else {
return Ok(user_entity);
};

(EntityType::Merchant, None)
| (EntityType::Organization, Some(EntityType::Merchant))
| (EntityType::Merchant, Some(EntityType::Merchant)) => Ok(EntityType::Merchant),

(EntityType::Profile, None)
| (EntityType::Organization, Some(EntityType::Profile))
| (EntityType::Merchant, Some(EntityType::Profile))
| (EntityType::Profile, Some(EntityType::Profile)) => Ok(EntityType::Profile),

(EntityType::Merchant, Some(EntityType::Organization))
| (EntityType::Profile, Some(EntityType::Organization))
| (EntityType::Profile, Some(EntityType::Merchant)) => {
Err(report!(UserErrors::InvalidRoleOperation)).attach_printable(format!(
"{} level user requesting data for {:?} level",
user_entity, filter_entity
))
}
if user_entity < filter_entity {
return Err(report!(UserErrors::InvalidRoleOperation)).attach_printable(format!(
"{} level user requesting data for {:?} level",
user_entity, filter_entity
));
}

Ok(cmp::min(user_entity, filter_entity))
}

0 comments on commit 3e3c326

Please sign in to comment.