|
@ -6,7 +6,9 @@ use crate::db::models::*; |
|
|
use crate::db::DbConn; |
|
|
use crate::db::DbConn; |
|
|
use crate::CONFIG; |
|
|
use crate::CONFIG; |
|
|
|
|
|
|
|
|
use crate::api::{EmptyResult, JsonResult, JsonUpcase, Notify, NumberOrString, PasswordData, UpdateType}; |
|
|
use crate::api::{ |
|
|
|
|
|
EmptyResult, JsonResult, JsonUpcase, JsonUpcaseVec, Notify, NumberOrString, PasswordData, UpdateType, |
|
|
|
|
|
}; |
|
|
use crate::auth::{decode_invite, AdminHeaders, Headers, OwnerHeaders}; |
|
|
use crate::auth::{decode_invite, AdminHeaders, Headers, OwnerHeaders}; |
|
|
|
|
|
|
|
|
use crate::mail; |
|
|
use crate::mail; |
|
@ -26,6 +28,7 @@ pub fn routes() -> Vec<Route> { |
|
|
get_org_collections, |
|
|
get_org_collections, |
|
|
get_org_collection_detail, |
|
|
get_org_collection_detail, |
|
|
get_collection_users, |
|
|
get_collection_users, |
|
|
|
|
|
put_collection_users, |
|
|
put_organization, |
|
|
put_organization, |
|
|
post_organization, |
|
|
post_organization, |
|
|
post_organization_collections, |
|
|
post_organization_collections, |
|
@ -371,13 +374,46 @@ fn get_collection_users(org_id: String, coll_id: String, _headers: AdminHeaders, |
|
|
.map(|col_user| { |
|
|
.map(|col_user| { |
|
|
UserOrganization::find_by_user_and_org(&col_user.user_uuid, &org_id, &conn) |
|
|
UserOrganization::find_by_user_and_org(&col_user.user_uuid, &org_id, &conn) |
|
|
.unwrap() |
|
|
.unwrap() |
|
|
.to_json_collection_user_details(col_user.read_only, &conn) |
|
|
.to_json_collection_user_details(col_user.read_only) |
|
|
}) |
|
|
}) |
|
|
.collect(); |
|
|
.collect(); |
|
|
|
|
|
|
|
|
Ok(Json(json!(user_list))) |
|
|
Ok(Json(json!(user_list))) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[put("/organizations/<org_id>/collections/<coll_id>/users", data = "<data>")] |
|
|
|
|
|
fn put_collection_users( |
|
|
|
|
|
org_id: String, |
|
|
|
|
|
coll_id: String, |
|
|
|
|
|
data: JsonUpcaseVec<CollectionData>, |
|
|
|
|
|
_headers: AdminHeaders, |
|
|
|
|
|
conn: DbConn, |
|
|
|
|
|
) -> EmptyResult { |
|
|
|
|
|
// Get org and collection, check that collection is from org
|
|
|
|
|
|
if Collection::find_by_uuid_and_org(&coll_id, &org_id, &conn).is_none() { |
|
|
|
|
|
err!("Collection not found in Organization") |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Delete all the user-collections
|
|
|
|
|
|
CollectionUser::delete_all_by_collection(&coll_id, &conn)?; |
|
|
|
|
|
|
|
|
|
|
|
// And then add all the received ones (except if the user has access_all)
|
|
|
|
|
|
for d in data.iter().map(|d| &d.data) { |
|
|
|
|
|
let user = match UserOrganization::find_by_uuid(&d.Id, &conn) { |
|
|
|
|
|
Some(u) => u, |
|
|
|
|
|
None => err!("User is not part of organization"), |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if user.access_all { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
CollectionUser::save(&user.user_uuid, &coll_id, d.ReadOnly, &conn)?; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Ok(()) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
#[derive(FromForm)] |
|
|
#[derive(FromForm)] |
|
|
struct OrgIdData { |
|
|
struct OrgIdData { |
|
|
#[form(field = "organizationId")] |
|
|
#[form(field = "organizationId")] |
|
|