HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
thepartly
gatehouse
Rust2025–2025
thepartly / gatehouse

gatehouse

A flexible authorization library that combines role-based (RBAC), attribute-based (ABAC), and relationship-based (ReBAC) access control policies.

4Distinct people
4Mentions
0Explicit recommenders
354GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A flexible authorization library that combines role-based (RBAC), attribute-based (ABAC), and relationship-based (ReBAC) access control policies.

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by day4 dated mentions

Observed mentions: 2025-03-24 22:50:47 UTC to 2025-04-13 16:39:08 UTC.

0122025-03-24 00:00:00 UTC to 2025-03-25 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsMar 242025-03-25 00:00:00 UTC to 2025-03-26 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2025-03-26 00:00:00 UTC to 2025-03-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-03-27 00:00:00 UTC to 2025-03-28 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-03-28 00:00:00 UTC to 2025-03-29 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-03-29 00:00:00 UTC to 2025-03-30 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-03-30 00:00:00 UTC to 2025-03-31 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-03-31 00:00:00 UTC to 2025-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-01 00:00:00 UTC to 2025-04-02 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-02 00:00:00 UTC to 2025-04-03 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-03 00:00:00 UTC to 2025-04-04 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsApr 32025-04-04 00:00:00 UTC to 2025-04-05 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-05 00:00:00 UTC to 2025-04-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-06 00:00:00 UTC to 2025-04-07 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-07 00:00:00 UTC to 2025-04-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-08 00:00:00 UTC to 2025-04-09 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-09 00:00:00 UTC to 2025-04-10 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-10 00:00:00 UTC to 2025-04-11 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-11 00:00:00 UTC to 2025-04-12 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-12 00:00:00 UTC to 2025-04-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-04-13 00:00:00 UTC to 2025-04-14 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsApr 13

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Mar 242025-03-24 00:00:00 UTC2025-03-25 00:00:00 UTC110
Mar 252025-03-25 00:00:00 UTC2025-03-26 00:00:00 UTC202
Mar 262025-03-26 00:00:00 UTC2025-03-27 00:00:00 UTC000
Mar 272025-03-27 00:00:00 UTC2025-03-28 00:00:00 UTC000
Mar 282025-03-28 00:00:00 UTC2025-03-29 00:00:00 UTC000
Mar 292025-03-29 00:00:00 UTC2025-03-30 00:00:00 UTC000
Mar 302025-03-30 00:00:00 UTC2025-03-31 00:00:00 UTC000
Mar 312025-03-31 00:00:00 UTC2025-04-01 00:00:00 UTC000
Apr 12025-04-01 00:00:00 UTC2025-04-02 00:00:00 UTC000
Apr 22025-04-02 00:00:00 UTC2025-04-03 00:00:00 UTC000
Apr 32025-04-03 00:00:00 UTC2025-04-04 00:00:00 UTC000
Apr 42025-04-04 00:00:00 UTC2025-04-05 00:00:00 UTC000
Apr 52025-04-05 00:00:00 UTC2025-04-06 00:00:00 UTC000
Apr 62025-04-06 00:00:00 UTC2025-04-07 00:00:00 UTC000
Apr 72025-04-07 00:00:00 UTC2025-04-08 00:00:00 UTC000
Apr 82025-04-08 00:00:00 UTC2025-04-09 00:00:00 UTC000
Apr 92025-04-09 00:00:00 UTC2025-04-10 00:00:00 UTC000
Apr 102025-04-10 00:00:00 UTC2025-04-11 00:00:00 UTC000
Apr 112025-04-11 00:00:00 UTC2025-04-12 00:00:00 UTC000
Apr 122025-04-12 00:00:00 UTC2025-04-13 00:00:00 UTC000
Apr 132025-04-13 00:00:00 UTC2025-04-14 00:00:00 UTC110

What Hacker News says

4 sources

Show HN: Gatehouse-TS – TypeScript port of Rust's authorization policy framework

TL;DR Gatehouse-TS is a zero-dependencies authorization policy library written in TypeScript, ported from Rust. It allows you to combine different access control policies to check before allowing someone to access a resource. A few weeks ago, I saw a post on HN about Gatehouse, an authorization library written in Rust. Here's the original HN thread: https://news.ycombinator.com/item?id=43466221 I looked at their GitHub page, and started reading the source code. I do this for anything posted here that catches my attention, even if it's written in a language I don't understand. The code was relatively easy to follow, even though I'm not a Rust programmer. Why did I decide to try rewriting it in TypeScript? For fun, of course! That was basically the only reason. I had nothing to do on a weekend and wanted to write code. It _did_ help with so
Read the rest
me challenges I was facing at $day_job, but that came afterwards. I emailed the authors of the Rust version, telling them that I was working in a TypeScript version, and they kindly blessed me to publish it with a similar name. Overall I'm very happy with it. The original authors provided an amazing foundation for a port, I had fun rewriting it and trying to adapt their APIs from Rust to TypeScript. As a bonus, it was immediately useful at work as well. I appreciate any feedback or thoughts on it. Please check out the original project as well, since most of the hard work was done by them: https://github.com/thepartly/gatehouse Documentation: https://9morello.github.io/gatehouse-ts/
23 points · Open discussion
Yeah it makes more sense now. First I was looking at the Axum integration example https://github.com/thepartly/gatehouse/blob/a3b46bcb37353cb5... where they do the simulated I/O first and then do a policy check that consists only of business logic without any I/O as far as I could tell https://github.com/thepartly/gatehouse/blob/a3b46bcb37353cb5... Because there from what I could see, all decisions made by the policies are based on properties read from the user, resource and action objects that were already retrieved in full by the application before it did the call to evaluate access. So from that and looking over the framework itself I was wondering why evaluating access was an async function, when all of the data I saw it use was retrieved before doing the actual access evaluation itself. But after reading your comment I then had a loo
Read the rest
k at some of the other examples, and found for example the ReBAC policy example https://github.com/thepartly/gatehouse/blob/a3b46bcb37353cb5... which does seem to be written like it demonstrates I/O such as DB lookups during the access evaluation itself. It kind of seems to me now then, that the sort of usage of the framework they demonstrate in the Axum integration would typically not do I/O during access evaluation, even for a production grade app. Whereas the kind of usage they demonstrate in the ReBAC example would. And that the reason for involving async is to facilitate the sort of usage they do in the ReBAC example and that it is sort of incidental then that even when you use it in a way that would work for production without I/O during access evaluation, like in the Axum integration example, you still end up with the access evaluation being an async function. Because they are doing a framework that also has to support the ReBAC example kind of usage they have the trait for access evaluation async. And in turn this probably makes it so that you could start using the framework with the sort of access evaluation that is not doing I/O itself (like in the Axum integration), and then you still have flexibility for later to drop in one that does (like in the ReBAC example) without having to change too much in the parts of your code where you were calling the access evaluation from the beginning. I could see some value in that. At the same time, assuming my above understanding is correct, it also does seem like in some cases one might end up pulling in a framework that is more flexible than one really needs, if one starts out with using it in the way like in the Axum integration example and then later finds out that one ended up not needing much more beyond what one could do with that. And because I myself don't yet have advanced needs like in the ReBAC example, I'm not sure if a framework like this would really benefit me. Or if I'd be better off finding a more basic framework for doing authorization in my own server programs. Of course, I could be misunderstanding the whole thing still :P
In Gatehouse – a composable, async-friendly authorization policy framework in Rust

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.