Catch assumption needed errors

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-02-09 16:08:08 +04:00
parent 25262ee6fb
commit ce69899909
8 changed files with 50 additions and 56 deletions

View File

@@ -99,7 +99,7 @@ func (a *Authorizer) authorize(ctx context.Context, conn pg.Conn, params Authori
var errSessionExpired *ErrSessionExpired
if errors.As(err, &errSessionNotFound) || errors.As(err, &errSessionExpired) {
return NewInsufficientPermissionsError(params.Principal, params.Resource, params.Action)
return NewAssumptionNeededError(params.Principal, membership.ID)
}
return fmt.Errorf("cannot get active child session for membership: %w", err)

View File

@@ -183,6 +183,19 @@ func (e ErrInsufficientPermissions) Error() string {
return fmt.Sprintf("identity %q does not have sufficient permissions to perform action %s on entity %q", e.IdentityID, e.Action, e.EntityID)
}
type ErrAssumptionNeeded struct {
IdentityID gid.GID
MembershipID gid.GID
}
func NewAssumptionNeededError(identityID gid.GID, membershipID gid.GID) error {
return &ErrAssumptionNeeded{IdentityID: identityID, MembershipID: membershipID}
}
func (e ErrAssumptionNeeded) Error() string {
return fmt.Sprintf("assumption for identity %q needed for membership %q", e.IdentityID, e.MembershipID)
}
type ErrSessionNotFound struct{ SessionID gid.GID }
func NewSessionNotFoundError(sessionID gid.GID) error {