v4.1.0
Rhino 4.1.0
Domain-aware route groups
Route groups can declare a domain to scope their routes to a host — literal
(admin.example.com) or parameterized ({organization}.example.com) for
subdomain multitenancy. Combines with prefix; parameterized domains feed
organization resolution.
Route group conflict validation
Boot-time validation throws when two route groups would silently shadow each
other (same prefix + intersecting host-set + overlapping models), with a clear
message and remediation.
Group-aware auth, membership & lifecycle hooks (opt-in)
- Group membership on
user_rolesvia a nullableroute_groupcolumn
(NULL = wildcard), gated byenforce_group_membership. When on, a request's
group requires a matching membership (else 403) and permissions resolve
from the matching row. - Group-aware auth — groups with
auth: trueregister their own auth route
set; the legacy auth endpoints are preserved. - Invitations carry the route group; accept populates the membership.
- Lifecycle hooks run after each auth action and may reject, revoking the
just-issued token.afterPasswordRecoverrejection is swallowed to prevent
email enumeration.
All new behavior is opt-in — with the flags off, behavior is unchanged.