anvilsign in

collin/anvil

1//! Authorization rules for repositories.
2//!
3//! The model is deliberately simple, matching a personal / small-team forge:
4//! a repo is owned by one user; private repos are visible only to their owner;
5//! writes (push) and settings changes are owner-only. Admins may do anything.
6
7use crate::models::{Repository, User};
8
9/// Whether `viewer` may read (browse / clone) `repo`.
10pub fn can_read(repo: &Repository, viewer: Option<&User>) -> bool {
11 !repo.is_private || can_write(repo, viewer)
12}
13
14/// Whether `viewer` may write (push) to / administer `repo`.
15pub fn can_write(repo: &Repository, viewer: Option<&User>) -> bool {
16 match viewer {
17 Some(user) => user.id == repo.owner_id || user.is_admin,
18 None => false,
19 }
20}