Documentation
¶
Overview ¶
Package authzguardsql builds GuardSQL policies from SystemForge authorization. PolicyBuilder checks read on every entity and read, list and sort on every field of a GuardSQL schema, and compiles the answers into a guardsql.Policy. Entities and fields are mapped to resources by a ResourceBuilder; DefaultResourceBuilder gives each one a concrete, organization-scoped resource ID.
Index ¶
- Constants
- Variables
- type DefaultResourceBuilder
- func (b DefaultResourceBuilder) EntityResource(entity string) authz.Resource
- func (b DefaultResourceBuilder) EntityResourceID(entity string) uuid.UUID
- func (b DefaultResourceBuilder) FieldResource(entity, field string) authz.Resource
- func (b DefaultResourceBuilder) FieldResourceID(entity, field string) uuid.UUID
- type PolicyBuilder
- type ResourceBuilder
- type ResourceBuilderFunc
Constants ¶
const ( ResourceTypeEntity authz.ResourceType = "guardsql_entity" ResourceTypeField authz.ResourceType = "guardsql_field" )
Resource types produced by DefaultResourceBuilder.
Variables ¶
var ErrNoAuthorizedEntities = errors.New("authzguardsql: principal may read no entity")
ErrNoAuthorizedEntities is returned by PolicyBuilder.Build when the principal may read no entity of the schema. A policy with nothing allowed must not be built, because guardsql reads empty allowlists as unrestricted.
Functions ¶
This section is empty.
Types ¶
type DefaultResourceBuilder ¶
type DefaultResourceBuilder struct {
// OrgID is the organization the schema's data belongs to.
OrgID *uuid.UUID
}
DefaultResourceBuilder maps every entity and every field to its own concrete resource: type ResourceTypeEntity or ResourceTypeField, with a deterministic ID derived from the organization, entity and field names (see EntityResourceID and FieldResourceID), and the organization as the resource's OrgID. The names are also kept in the "entity" and "field" attributes for logging, but no provider evaluates attributes.
Policy follows from the provider:
- SpiceDB checks the concrete object, so each field has its own relationships; write them for guardsql_field:<FieldResourceID>.
- rbac checks role permissions keyed by type ("guardsql_field.read"), so such a permission grants every field of every entity. For column-level policy with rbac, use a ResourceBuilder whose resource types name the entity and field.
Set OrgID: without it, rbac answers only for the resource owner, and IDs are shared by every organization.
func (DefaultResourceBuilder) EntityResource ¶
func (b DefaultResourceBuilder) EntityResource(entity string) authz.Resource
EntityResource implements ResourceBuilder.
func (DefaultResourceBuilder) EntityResourceID ¶ added in v0.21.0
func (b DefaultResourceBuilder) EntityResourceID(entity string) uuid.UUID
EntityResourceID returns the deterministic resource ID of entity.
func (DefaultResourceBuilder) FieldResource ¶
func (b DefaultResourceBuilder) FieldResource(entity, field string) authz.Resource
FieldResource implements ResourceBuilder.
func (DefaultResourceBuilder) FieldResourceID ¶ added in v0.21.0
func (b DefaultResourceBuilder) FieldResourceID(entity, field string) uuid.UUID
FieldResourceID returns the deterministic resource ID of entity's field.
type PolicyBuilder ¶
type PolicyBuilder struct {
Authorizer authz.Authorizer
Principal authz.Principal
Schema guardsql.Schema
ResourceBuilder ResourceBuilder
RequireLimit bool
MaxLimit int
MaxDepth int
MaxNodes int
MaxInValues int
AllowStar bool
}
PolicyBuilder checks SystemForge authorization for schema entities/fields and compiles the result into a GuardSQL policy.
type ResourceBuilder ¶
type ResourceBuilder interface {
EntityResource(entity string) authz.Resource
FieldResource(entity, field string) authz.Resource
}
ResourceBuilder maps GuardSQL entities and fields to SystemForge resources. Applications can use these names directly in SpiceDB schemas or adapt them to product-specific resource types.
type ResourceBuilderFunc ¶
type ResourceBuilderFunc struct {
Entity func(entity string) authz.Resource
Field func(entity, field string) authz.Resource
}
ResourceBuilderFunc adapts functions into a ResourceBuilder.
func (ResourceBuilderFunc) EntityResource ¶
func (f ResourceBuilderFunc) EntityResource(entity string) authz.Resource
EntityResource implements ResourceBuilder.
func (ResourceBuilderFunc) FieldResource ¶
func (f ResourceBuilderFunc) FieldResource(entity, field string) authz.Resource
FieldResource implements ResourceBuilder.