mirror of
https://github.com/dani-garcia/vaultwarden.wiki.git
synced 2026-10-24 03:16:40 +03:00
Require confirmed membership for user access checks, not for admin views (#7763)
This commit is contained in:
1 parent
d2660324e6
commit
32098ca7d1
6 files changed
+68
-76
No files matched your search
@@ -367,6 +367,7 @@ impl Collection {
|
||||
.and(collections_groups::collections_uuid.eq(collections::uuid))),
|
||||
)
|
||||
.filter(collections::uuid.eq(uuid))
|
||||
.filter(users_organizations::status.eq(MembershipStatus::Confirmed as i32))
|
||||
.filter(
|
||||
users_collections::collection_uuid
|
||||
.eq(uuid)
|
||||
@@ -406,6 +407,7 @@ impl Collection {
|
||||
.and(users_organizations::user_uuid.eq(user_uuid))),
|
||||
)
|
||||
.filter(collections::uuid.eq(uuid))
|
||||
.filter(users_organizations::status.eq(MembershipStatus::Confirmed as i32))
|
||||
.filter(users_collections::collection_uuid.eq(uuid).or(
|
||||
// Directly accessed collection
|
||||
users_organizations::access_all.eq(true).or(
|
||||
@@ -430,7 +432,8 @@ impl Collection {
|
||||
.inner_join(
|
||||
users_organizations::table.on(collections::org_uuid
|
||||
.eq(users_organizations::org_uuid)
|
||||
.and(users_organizations::user_uuid.eq(user_uuid.clone()))),
|
||||
.and(users_organizations::user_uuid.eq(user_uuid.clone()))
|
||||
.and(users_organizations::status.eq(MembershipStatus::Confirmed as i32))),
|
||||
)
|
||||
.left_join(
|
||||
users_collections::table.on(users_collections::collection_uuid
|
||||
@@ -476,7 +479,8 @@ impl Collection {
|
||||
.inner_join(
|
||||
users_organizations::table.on(collections::org_uuid
|
||||
.eq(users_organizations::org_uuid)
|
||||
.and(users_organizations::user_uuid.eq(user_uuid.clone()))),
|
||||
.and(users_organizations::user_uuid.eq(user_uuid.clone()))
|
||||
.and(users_organizations::status.eq(MembershipStatus::Confirmed as i32))),
|
||||
)
|
||||
.left_join(
|
||||
users_collections::table.on(users_collections::collection_uuid
|
||||
@@ -527,6 +531,7 @@ impl Collection {
|
||||
.and(collections_groups::collections_uuid.eq(collections::uuid))),
|
||||
)
|
||||
.filter(collections::uuid.eq(&self.uuid))
|
||||
.filter(users_organizations::status.eq(MembershipStatus::Confirmed as i32))
|
||||
.filter(
|
||||
users_collections::collection_uuid
|
||||
.eq(&self.uuid)
|
||||
@@ -586,6 +591,7 @@ impl Collection {
|
||||
.and(collections_groups::collections_uuid.eq(collections::uuid))),
|
||||
)
|
||||
.filter(collections::uuid.eq(&uuid))
|
||||
.filter(users_organizations::status.eq(MembershipStatus::Confirmed as i32))
|
||||
.filter(
|
||||
users_collections::collection_uuid
|
||||
.eq(&uuid)
|
||||
@@ -650,6 +656,7 @@ impl Collection {
|
||||
.and(collections_groups::collections_uuid.eq(collections::uuid))),
|
||||
)
|
||||
.filter(collections::org_uuid.eq(&org_uuid))
|
||||
.filter(users_organizations::status.eq(MembershipStatus::Confirmed as i32))
|
||||
.filter(
|
||||
// Manage permission on a collection assigned directly or via a group.
|
||||
users_collections::manage.eq(true).or(collections_groups::manage.eq(true)),
|
||||
@@ -819,10 +826,18 @@ impl CollectionUser {
|
||||
.await
|
||||
}
|
||||
|
||||
// Only returns the collections of organizations the user is a confirmed member of
|
||||
pub async fn find_by_user(user_uuid: &UserId, conn: &DbConn) -> Vec<Self> {
|
||||
conn.run(move |conn| {
|
||||
users_collections::table
|
||||
.inner_join(collections::table.on(collections::uuid.eq(users_collections::collection_uuid)))
|
||||
.inner_join(
|
||||
users_organizations::table.on(users_organizations::org_uuid
|
||||
.eq(collections::org_uuid)
|
||||
.and(users_organizations::user_uuid.eq(users_collections::user_uuid))),
|
||||
)
|
||||
.filter(users_collections::user_uuid.eq(user_uuid))
|
||||
.filter(users_organizations::status.eq(MembershipStatus::Confirmed as i32))
|
||||
.select(users_collections::all_columns)
|
||||
.load::<Self>(conn)
|
||||
.expect("Error loading users_collections")
|
||||
|
||||
Reference in new issue
Block a user