diff --git a/migrations/2018-04-27-155151_create_users_ciphers/down.sql b/migrations/2018-04-27-155151_create_users_ciphers/down.sql new file mode 100644 index 0000000..e69de29 diff --git a/migrations/2018-04-27-155151_create_users_ciphers/up.sql b/migrations/2018-04-27-155151_create_users_ciphers/up.sql index 12c096e..747f9e2 100644 --- a/migrations/2018-04-27-155151_create_users_ciphers/up.sql +++ b/migrations/2018-04-27-155151_create_users_ciphers/up.sql @@ -29,4 +29,6 @@ INSERT INTO folders_ciphers (cipher_uuid, folder_uuid) SELECT uuid, folder_uuid FROM oldCiphers WHERE folder_uuid IS NOT NULL; -DROP TABLE oldCiphers; \ No newline at end of file +DROP TABLE oldCiphers; + +ALTER TABLE users_collections ADD COLUMN read_only BOOLEAN NOT NULL DEFAULT 0; -- False diff --git a/src/api/core/organizations.rs b/src/api/core/organizations.rs index 811863b..75547d0 100644 --- a/src/api/core/organizations.rs +++ b/src/api/core/organizations.rs @@ -150,7 +150,7 @@ fn post_organization_collections(org_id: String, headers: Headers, data: Json, headers: Headers, conn: D // If no accessAll, add the collections received if !data.accessAll { for collection in data.collections.iter() { - // TODO: Check that collection is in org - // TODO: Save the readOnly bit - - CollectionUsers::save(&headers.user.uuid, &collection.id, &conn); + // TODO: Check that collection is in org + CollectionUsers::save(&headers.user.uuid, &collection.id, collection.readOnly, &conn); } } @@ -443,10 +441,8 @@ fn edit_user(org_id: String, user_id: String, data: Json, headers: // If no accessAll, add the collections received if !data.accessAll { for collection in data.collections.iter() { - // TODO: Check that collection is in org - // TODO: Save the readOnly bit - - CollectionUsers::save(¤t_user.uuid, &collection.id, &conn); + // TODO: Check that collection is in org + CollectionUsers::save(¤t_user.uuid, &collection.id, collection.readOnly, &conn); } } diff --git a/src/db/models/collection.rs b/src/db/models/collection.rs index 61c11b1..ba5f47d 100644 --- a/src/db/models/collection.rs +++ b/src/db/models/collection.rs @@ -106,15 +106,17 @@ use super::User; pub struct CollectionUsers { pub user_uuid: String, pub collection_uuid: String, + pub read_only: bool, } /// Database methods impl CollectionUsers { - pub fn save(user_uuid: &str, collection_uuid: &str, conn: &DbConn) -> bool { + pub fn save(user_uuid: &str, collection_uuid: &str, read_only:bool, conn: &DbConn) -> bool { match diesel::replace_into(users_collections::table) .values(( users_collections::user_uuid.eq(user_uuid), - users_collections::collection_uuid.eq(collection_uuid) + users_collections::collection_uuid.eq(collection_uuid), + users_collections::read_only.eq(read_only), )).execute(&**conn) { Ok(1) => true, // One row inserted _ => false, diff --git a/src/db/schema.rs b/src/db/schema.rs index f55c146..7633665 100644 --- a/src/db/schema.rs +++ b/src/db/schema.rs @@ -56,6 +56,13 @@ table! { } } +table! { + folders_ciphers (cipher_uuid, folder_uuid) { + cipher_uuid -> Text, + folder_uuid -> Text, + } +} + table! { organizations (uuid) { uuid -> Text, @@ -90,6 +97,7 @@ table! { users_collections (user_uuid, collection_uuid) { user_uuid -> Text, collection_uuid -> Text, + read_only -> Bool, } } @@ -106,24 +114,18 @@ table! { } } -table! { - folders_ciphers (cipher_uuid, folder_uuid) { - cipher_uuid -> Text, - folder_uuid -> Text, - } -} - joinable!(attachments -> ciphers (cipher_uuid)); +joinable!(ciphers -> organizations (organization_uuid)); joinable!(ciphers -> users (user_uuid)); joinable!(collections -> organizations (org_uuid)); joinable!(devices -> users (user_uuid)); joinable!(folders -> users (user_uuid)); +joinable!(folders_ciphers -> ciphers (cipher_uuid)); +joinable!(folders_ciphers -> folders (folder_uuid)); joinable!(users_collections -> collections (collection_uuid)); joinable!(users_collections -> users (user_uuid)); joinable!(users_organizations -> organizations (org_uuid)); joinable!(users_organizations -> users (user_uuid)); -joinable!(folders_ciphers -> ciphers (cipher_uuid)); -joinable!(folders_ciphers -> folders (folder_uuid)); allow_tables_to_appear_in_same_query!( attachments, @@ -131,9 +133,9 @@ allow_tables_to_appear_in_same_query!( collections, devices, folders, + folders_ciphers, organizations, users, users_collections, users_organizations, - folders_ciphers, );