From 69312224da7738b5897de9079c329a2dfa035c0f Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Mon, 17 Feb 2020 17:56:53 +0100 Subject: [PATCH] filter member list according to permission matrix --- src/db/internal/member.rs | 14 +++++++++++--- src/db/operations/members.rs | 5 ++++- src/db/operations/models.rs | 13 ++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/db/internal/member.rs b/src/db/internal/member.rs index ddb2e7a..44e3944 100644 --- a/src/db/internal/member.rs +++ b/src/db/internal/member.rs @@ -12,6 +12,7 @@ use crate::user::User; use crate::utils::to_expiration_ts; use chrono::NaiveDateTime; use diesel::prelude::*; +use dino_park_trust::Trust; use failure::Error; use serde_json::Value; use uuid::Uuid; @@ -27,6 +28,7 @@ macro_rules! scoped_members_for { roles: &[RoleType], limit: i64, offset: Option, + scope: &Trust, ) -> Result { use schema::groups as g; use schema::memberships as m; @@ -64,11 +66,17 @@ macro_rules! scoped_members_for { u::email, u::trust.eq(TrustType::Staff), r::typ, + m::added_ts, )) .offset(offset) .limit(limit) .get_results::(connection) - .map(|members| members.into_iter().map(|m| m.into()).collect()) + .map(|members| { + members + .into_iter() + .map(|m| DisplayMemberAndHost::from_with_socpe(m, scope)) + .collect() + }) }) .map(|members: Vec| { let next = match members.len() { @@ -156,14 +164,14 @@ macro_rules! scoped_members_and_host_for { } // scoped_members_for!(users_staff, staff_scoped_members); -scoped_members_for!(users_ndaed, ndaed_scoped_members); +// scoped_members_for!(users_ndaed, ndaed_scoped_members); scoped_members_for!(users_vouched, vouched_scoped_members); scoped_members_for!(users_authenticated, authenticated_scoped_members); scoped_members_for!(users_public, public_scoped_members); scoped_members_and_host_for!(users_staff, hosts_staff, staff_scoped_members_and_host); -/* scoped_members_and_host_for!(users_ndaed, hosts_ndaed, ndaed_scoped_members_and_host); +/* scoped_members_and_host_for!( users_vouched, hosts_vouched, diff --git a/src/db/operations/members.rs b/src/db/operations/members.rs index 9c7976a..1262736 100644 --- a/src/db/operations/members.rs +++ b/src/db/operations/members.rs @@ -47,7 +47,7 @@ pub fn scoped_members_and_host( limit, offset, ), - Trust::Ndaed => internal::member::ndaed_scoped_members( + Trust::Ndaed => internal::member::ndaed_scoped_members_and_host( &connection, group_name, query, @@ -62,6 +62,7 @@ pub fn scoped_members_and_host( roles, limit, offset, + scope, ), Trust::Authenticated => internal::member::authenticated_scoped_members( &connection, @@ -70,6 +71,7 @@ pub fn scoped_members_and_host( roles, limit, offset, + scope, ), Trust::Public => internal::member::public_scoped_members( &connection, @@ -78,6 +80,7 @@ pub fn scoped_members_and_host( roles, limit, offset, + scope, ), } } diff --git a/src/db/operations/models.rs b/src/db/operations/models.rs index ae920bc..ffe5c4d 100644 --- a/src/db/operations/models.rs +++ b/src/db/operations/models.rs @@ -2,6 +2,7 @@ use crate::db::model::Group; use crate::db::model::GroupsList; use crate::db::types::*; use chrono::NaiveDateTime; +use dino_park_trust::Trust; use serde_derive::Deserialize; use serde_derive::Serialize; use uuid::Uuid; @@ -160,6 +161,7 @@ pub struct Member { pub email: Option, pub is_staff: bool, pub role: RoleType, + pub since: NaiveDateTime, } #[derive(Queryable, Serialize)] @@ -181,8 +183,13 @@ pub struct MemberAndHost { pub host_email: Option, } -impl From for DisplayMemberAndHost { - fn from(m: Member) -> Self { +impl DisplayMemberAndHost { + pub fn from_with_socpe(m: Member, scope: &Trust) -> Self { + let since = if scope >= &Trust::Authenticated { + Some(m.since) + } else { + None + }; DisplayMemberAndHost { user_uuid: m.user_uuid, picture: m.picture, @@ -191,7 +198,7 @@ impl From for DisplayMemberAndHost { username: m.username, email: m.email, is_staff: m.is_staff, - since: None, + since, expiration: None, role: m.role, host: None,