Browse Source

fix: restrict collection manage permissions to managers only

Prevent users from getting logged out when they have manage permissions by only allowing manage permissions for MembershipType::Manager and higher roles.
pull/6017/head
Richy 2 days ago
committed by Richy
parent
commit
fff8d86c3b
  1. 8
      src/db/models/collection.rs

8
src/db/models/collection.rs

@ -97,13 +97,13 @@ impl Collection {
( (
cu.read_only, cu.read_only,
cu.hide_passwords, cu.hide_passwords,
cu.manage || (is_manager && !cu.read_only && !cu.hide_passwords), is_manager && (cu.manage || (!cu.read_only && !cu.hide_passwords)),
) )
} else if let Some(cg) = cipher_sync_data.user_collections_groups.get(&self.uuid) { } else if let Some(cg) = cipher_sync_data.user_collections_groups.get(&self.uuid) {
( (
cg.read_only, cg.read_only,
cg.hide_passwords, cg.hide_passwords,
cg.manage || (is_manager && !cg.read_only && !cg.hide_passwords), is_manager && (cg.manage || (!cg.read_only && !cg.hide_passwords)),
) )
} else { } else {
(false, false, false) (false, false, false)
@ -114,7 +114,9 @@ impl Collection {
} else { } else {
match Membership::find_confirmed_by_user_and_org(user_uuid, &self.org_uuid, conn).await { match Membership::find_confirmed_by_user_and_org(user_uuid, &self.org_uuid, conn).await {
Some(m) if m.has_full_access() => (false, false, m.atype >= MembershipType::Manager), Some(m) if m.has_full_access() => (false, false, m.atype >= MembershipType::Manager),
Some(_) if self.is_manageable_by_user(user_uuid, conn).await => (false, false, true), Some(m) if m.atype == MembershipType::Manager && self.is_manageable_by_user(user_uuid, conn).await => {
(false, false, true)
}
Some(m) => { Some(m) => {
let is_manager = m.atype == MembershipType::Manager; let is_manager = m.atype == MembershipType::Manager;
let read_only = !self.is_writable_by_user(user_uuid, conn).await; let read_only = !self.is_writable_by_user(user_uuid, conn).await;

Loading…
Cancel
Save