diff --git a/src/models/teams.rs b/src/models/teams.rs index 346e2505..53118cba 100644 --- a/src/models/teams.rs +++ b/src/models/teams.rs @@ -45,6 +45,23 @@ impl Default for Permissions { } } +impl Permissions { + pub fn get_permissions_by_role( + role: &crate::models::users::Role, + team_member: &Option, + ) -> Option { + if role.is_admin() { + Some(Permissions::ALL) + } else if let Some(member) = team_member { + Some(member.permissions) + } else if role.is_mod() { + Some(Permissions::EDIT_DETAILS | Permissions::EDIT_BODY | Permissions::UPLOAD_VERSION) + } else { + None + } + } +} + /// A member of a team #[derive(Serialize, Deserialize, Clone)] pub struct TeamMember { diff --git a/src/routes/v2/projects.rs b/src/routes/v2/projects.rs index d6e9d4f2..d75cc4b9 100644 --- a/src/routes/v2/projects.rs +++ b/src/routes/v2/projects.rs @@ -407,17 +407,8 @@ pub async fn project_edit( &**pool, ) .await?; - let permissions; - if user.role.is_admin() { - permissions = Some(Permissions::ALL) - } else if let Some(ref member) = team_member { - permissions = Some(member.permissions) - } else if user.role.is_mod() { - permissions = Some(Permissions::EDIT_DETAILS | Permissions::EDIT_BODY) - } else { - permissions = None - } + let permissions = Permissions::get_permissions_by_role(&user.role, &team_member); if let Some(perms) = permissions { let mut transaction = pool.begin().await?; diff --git a/src/routes/v2/versions.rs b/src/routes/v2/versions.rs index c1837da8..93da53d4 100644 --- a/src/routes/v2/versions.rs +++ b/src/routes/v2/versions.rs @@ -349,17 +349,8 @@ pub async fn version_edit( &**pool, ) .await?; - let permissions; - if user.role.is_admin() { - permissions = Some(Permissions::ALL) - } else if let Some(member) = team_member { - permissions = Some(member.permissions) - } else if user.role.is_mod() { - permissions = Some(Permissions::EDIT_DETAILS | Permissions::EDIT_BODY) - } else { - permissions = None - } + let permissions = Permissions::get_permissions_by_role(&user.role, &team_member); if let Some(perms) = permissions { if !perms.contains(Permissions::UPLOAD_VERSION) {