-
Notifications
You must be signed in to change notification settings - Fork 874
chore: add x-authz-checks debug header when running in dev mode #16873
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
6026b20
to
038ad91
Compare
coderd/rbac/authz.go
Outdated
return | ||
} | ||
|
||
r.checks.Store(b.String(), authorized) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know this probably shouldn't happen in the real world, but what if the first authz check returns true, and a subsequent authz check for the same subject, action, and object returns false? I think this would be a really good opportunity to catch something like this and make a lot of confused and angry noises.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe I should just use a slice so that duplicates get recorded
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ooh, a slice would also show you how many times a particular authz check gets done. Maybe a map[string]int
to count frequencies? That would make it easier to read?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
map[string]int
doesn't leave room to store the bool
. now that I'm thinking about it, a slice is also nice because it guarantees that order is preserved, which is probably a good thing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's a good point actually! You can then reason about the order of the checks. 🧠
if buildinfo.IsDev() { | ||
options.Authorizer = rbac.Recorder(options.Authorizer) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will actually run on dogfood as well. Is this what we want?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yup! makes for a nice quick resource to check
In development builds...
httpapi.Write
to put this information in a response headerThe header will look something like:
The syntax may look a bit weird, but I think it's important to have distinct separators for everything.
:
::
=
;
This can totally be changed in the future if people think it's too confusing, but I think it's pretty good.