diff options
Diffstat (limited to 'src/permissions.rs')
-rw-r--r-- | src/permissions.rs | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/permissions.rs b/src/permissions.rs index 5901cb8..c4d2454 100644 --- a/src/permissions.rs +++ b/src/permissions.rs @@ -1,4 +1,5 @@ use crate::data::Data; +use crate::schema::Person; use failure::{bail, Error}; use std::collections::HashSet; @@ -149,22 +150,20 @@ permissions! { } } -pub(crate) fn allowed_github_users( - data: &Data, +pub(crate) fn allowed_people<'a>( + data: &'a Data, permission: &str, -) -> Result<HashSet<String>, Error> { - let mut github_users = HashSet::new(); +) -> Result<Vec<&'a Person>, Error> { + let mut members_with_perms = HashSet::new(); for team in data.teams() { if team.permissions().has(permission) { for member in team.members(&data)? { - github_users.insert(member.to_string()); + members_with_perms.insert(member); } } } - for person in data.people() { - if person.permissions().has(permission) { - github_users.insert(person.github().to_string()); - } - } - Ok(github_users) + Ok(data + .people() + .filter(|p| members_with_perms.contains(p.github()) || p.permissions().has(permission)) + .collect()) } |