|
@@ -748,8 +748,6 @@ struct GetOrgUserData {
|
|
include_groups: Option<bool>,
|
|
include_groups: Option<bool>,
|
|
}
|
|
}
|
|
|
|
|
|
-// includeCollections
|
|
|
|
-// includeGroups
|
|
|
|
#[get("/organizations/<org_id>/users?<data..>")]
|
|
#[get("/organizations/<org_id>/users?<data..>")]
|
|
async fn get_org_users(
|
|
async fn get_org_users(
|
|
data: GetOrgUserData,
|
|
data: GetOrgUserData,
|
|
@@ -1229,14 +1227,25 @@ async fn _confirm_invite(
|
|
save_result
|
|
save_result
|
|
}
|
|
}
|
|
|
|
|
|
-#[get("/organizations/<org_id>/users/<org_user_id>")]
|
|
|
|
-async fn get_user(org_id: String, org_user_id: String, _headers: AdminHeaders, mut conn: DbConn) -> JsonResult {
|
|
|
|
|
|
+#[get("/organizations/<org_id>/users/<org_user_id>?<data..>")]
|
|
|
|
+async fn get_user(
|
|
|
|
+ org_id: String,
|
|
|
|
+ org_user_id: String,
|
|
|
|
+ data: GetOrgUserData,
|
|
|
|
+ _headers: AdminHeaders,
|
|
|
|
+ mut conn: DbConn,
|
|
|
|
+) -> JsonResult {
|
|
let user = match UserOrganization::find_by_uuid_and_org(&org_user_id, &org_id, &mut conn).await {
|
|
let user = match UserOrganization::find_by_uuid_and_org(&org_user_id, &org_id, &mut conn).await {
|
|
Some(user) => user,
|
|
Some(user) => user,
|
|
None => err!("The specified user isn't a member of the organization"),
|
|
None => err!("The specified user isn't a member of the organization"),
|
|
};
|
|
};
|
|
|
|
|
|
- Ok(Json(user.to_json_details(&mut conn).await))
|
|
|
|
|
|
+ // In this case, when groups are requested we also need to include collections.
|
|
|
|
+ // Else these will not be shown in the interface, and could lead to missing collections when saved.
|
|
|
|
+ let include_groups = data.include_groups.unwrap_or(false);
|
|
|
|
+ Ok(Json(
|
|
|
|
+ user.to_json_user_details(data.include_collections.unwrap_or(include_groups), include_groups, &mut conn).await,
|
|
|
|
+ ))
|
|
}
|
|
}
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
#[derive(Deserialize)]
|
|
@@ -1244,6 +1253,7 @@ async fn get_user(org_id: String, org_user_id: String, _headers: AdminHeaders, m
|
|
struct EditUserData {
|
|
struct EditUserData {
|
|
Type: NumberOrString,
|
|
Type: NumberOrString,
|
|
Collections: Option<Vec<CollectionData>>,
|
|
Collections: Option<Vec<CollectionData>>,
|
|
|
|
+ Groups: Option<Vec<String>>,
|
|
AccessAll: bool,
|
|
AccessAll: bool,
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1342,6 +1352,13 @@ async fn edit_user(
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ GroupUser::delete_all_by_user(&user_to_edit.uuid, &mut conn).await?;
|
|
|
|
+
|
|
|
|
+ for group in data.Groups.iter().flatten() {
|
|
|
|
+ let mut group_entry = GroupUser::new(String::from(group), user_to_edit.uuid.clone());
|
|
|
|
+ group_entry.save(&mut conn).await?;
|
|
|
|
+ }
|
|
|
|
+
|
|
log_event(
|
|
log_event(
|
|
EventType::OrganizationUserUpdated as i32,
|
|
EventType::OrganizationUserUpdated as i32,
|
|
&user_to_edit.uuid,
|
|
&user_to_edit.uuid,
|