╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1953 role: evt.Repo.Role, │ │1954 email: []const u8, │ │1955 │ │1956 - // the session's viewer of `repo`, or null when logged out. local mode owns everything. │ │1957 - pub fn init(session: *Session, arena: *std.heap.ArenaAllocator, repo: evt.Repo.Record) !?Viewer {│ │1956 + // the session's viewer of a repo it holds `role` in, or null when logged │ │1957 + // out. local mode owns everything. │ │1958 + pub fn init(session: *Session, arena: *std.heap.ArenaAllocator, role: evt.Repo.Role) !?Viewer { │ │1959 if (session.data.host_kind == .local) return .{ .role = .owner, .email = "" }; │ │1960 const user_id = session.userId() orelse return null; │ │1961 const moment = session.haxy_moment orelse unreachable; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────╮ │1962 const user = (try activeUser(moment, arena, user_id)) orelse return null; │ │1962 - return .{ .role = evt.Repo.roleOf(repo, user_id), .email = user.event.email };│ │1963 + return .{ .role = role, .email = user.event.email }; │ │1964 } │ │1965 }; │ │1966 │ ╰────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │2081 const user = (try activeUser(moment, arena, user_id)) orelse return .login_required; │ │2082 │ │2083 const owner_repo = evt.parseOwnerRepoPath(identity) orelse return .repo_not_found; │ │2083 - const repo = (try evt.readRepoByOwnerAndName(io, arena.child_allocator, arena, moment, users_dir, owner_repo.owner, owner_repo.name)) orelse return .repo_not_found; │ │2084 - const role = evt.Repo.roleOf(repo.repo, user_id); │ │2084 + const repo = (try evt.readRepoByOwnerAndName(io, arena.child_allocator, arena, moment, users_dir, owner_repo.owner, owner_repo.name, user_id)) orelse return .repo_not_found;│ │2085 + const role = repo.role; │ │2086 // a repo the user can't read doesn't exist to them │ │2087 if (role == .none) return .repo_not_found; │ │2088 if (!role.atLeast(min_role)) return .forbidden; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯