{{/* The line below tells Intellij/GoLand to enable the autocompletion based on the *gen.Graph type. */}} {{/* gotype: entgo.io/ent/entc/gen.Graph */}} {{/* An example privacy rule that is appended to the generated privacy package. For more info: https://entgo.io/docs/privacy#template-based */}} {{ define "privacy/additional/privacy" }} // FilterTenantRule is a query/mutation rule that filters out entities that are not in the tenant. func FilterTenantRule() QueryMutationRule { // TenantsFilter is an interface to wrap WhereTenantID() // predicate that is used by both `Group` and `User` schemas. type TenantsFilter interface { WhereTenantID(entql.IntP) } return FilterFunc(func(ctx context.Context, f Filter) error { view := viewer.FromContext(ctx) tid, ok := view.Tenant() if !ok { return Denyf("missing tenant information in viewer") } tf, ok := f.(TenantsFilter) if !ok { return Denyf("unexpected filter type %T", f) } // Make sure that a tenant reads only entities that have an edge to it. tf.WhereTenantID(entql.IntEQ(tid)) // Skip to the next privacy rule (equivalent to return nil). return Skip }) } {{ end }}