Skip to content

Commit 6931222

Browse files
committed
filter member list according to permission matrix
1 parent 682f4d1 commit 6931222

3 files changed

Lines changed: 25 additions & 7 deletions

File tree

src/db/internal/member.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::user::User;
1212
use crate::utils::to_expiration_ts;
1313
use chrono::NaiveDateTime;
1414
use diesel::prelude::*;
15+
use dino_park_trust::Trust;
1516
use failure::Error;
1617
use serde_json::Value;
1718
use uuid::Uuid;
@@ -27,6 +28,7 @@ macro_rules! scoped_members_for {
2728
roles: &[RoleType],
2829
limit: i64,
2930
offset: Option<i64>,
31+
scope: &Trust,
3032
) -> Result<PaginatedDisplayMembersAndHost, Error> {
3133
use schema::groups as g;
3234
use schema::memberships as m;
@@ -64,11 +66,17 @@ macro_rules! scoped_members_for {
6466
u::email,
6567
u::trust.eq(TrustType::Staff),
6668
r::typ,
69+
m::added_ts,
6770
))
6871
.offset(offset)
6972
.limit(limit)
7073
.get_results::<Member>(connection)
71-
.map(|members| members.into_iter().map(|m| m.into()).collect())
74+
.map(|members| {
75+
members
76+
.into_iter()
77+
.map(|m| DisplayMemberAndHost::from_with_socpe(m, scope))
78+
.collect()
79+
})
7280
})
7381
.map(|members: Vec<DisplayMemberAndHost>| {
7482
let next = match members.len() {
@@ -156,14 +164,14 @@ macro_rules! scoped_members_and_host_for {
156164
}
157165

158166
// scoped_members_for!(users_staff, staff_scoped_members);
159-
scoped_members_for!(users_ndaed, ndaed_scoped_members);
167+
// scoped_members_for!(users_ndaed, ndaed_scoped_members);
160168
scoped_members_for!(users_vouched, vouched_scoped_members);
161169
scoped_members_for!(users_authenticated, authenticated_scoped_members);
162170
scoped_members_for!(users_public, public_scoped_members);
163171

164172
scoped_members_and_host_for!(users_staff, hosts_staff, staff_scoped_members_and_host);
165-
/*
166173
scoped_members_and_host_for!(users_ndaed, hosts_ndaed, ndaed_scoped_members_and_host);
174+
/*
167175
scoped_members_and_host_for!(
168176
users_vouched,
169177
hosts_vouched,

src/db/operations/members.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub fn scoped_members_and_host(
4747
limit,
4848
offset,
4949
),
50-
Trust::Ndaed => internal::member::ndaed_scoped_members(
50+
Trust::Ndaed => internal::member::ndaed_scoped_members_and_host(
5151
&connection,
5252
group_name,
5353
query,
@@ -62,6 +62,7 @@ pub fn scoped_members_and_host(
6262
roles,
6363
limit,
6464
offset,
65+
scope,
6566
),
6667
Trust::Authenticated => internal::member::authenticated_scoped_members(
6768
&connection,
@@ -70,6 +71,7 @@ pub fn scoped_members_and_host(
7071
roles,
7172
limit,
7273
offset,
74+
scope,
7375
),
7476
Trust::Public => internal::member::public_scoped_members(
7577
&connection,
@@ -78,6 +80,7 @@ pub fn scoped_members_and_host(
7880
roles,
7981
limit,
8082
offset,
83+
scope,
8184
),
8285
}
8386
}

src/db/operations/models.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::db::model::Group;
22
use crate::db::model::GroupsList;
33
use crate::db::types::*;
44
use chrono::NaiveDateTime;
5+
use dino_park_trust::Trust;
56
use serde_derive::Deserialize;
67
use serde_derive::Serialize;
78
use uuid::Uuid;
@@ -160,6 +161,7 @@ pub struct Member {
160161
pub email: Option<String>,
161162
pub is_staff: bool,
162163
pub role: RoleType,
164+
pub since: NaiveDateTime,
163165
}
164166

165167
#[derive(Queryable, Serialize)]
@@ -181,8 +183,13 @@ pub struct MemberAndHost {
181183
pub host_email: Option<String>,
182184
}
183185

184-
impl From<Member> for DisplayMemberAndHost {
185-
fn from(m: Member) -> Self {
186+
impl DisplayMemberAndHost {
187+
pub fn from_with_socpe(m: Member, scope: &Trust) -> Self {
188+
let since = if scope >= &Trust::Authenticated {
189+
Some(m.since)
190+
} else {
191+
None
192+
};
186193
DisplayMemberAndHost {
187194
user_uuid: m.user_uuid,
188195
picture: m.picture,
@@ -191,7 +198,7 @@ impl From<Member> for DisplayMemberAndHost {
191198
username: m.username,
192199
email: m.email,
193200
is_staff: m.is_staff,
194-
since: None,
201+
since,
195202
expiration: None,
196203
role: m.role,
197204
host: None,

0 commit comments

Comments
 (0)