203 lines
5.3 KiB
Go
203 lines
5.3 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.31.1
|
|
// source: rebac_relations.sql
|
|
|
|
package db
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
const createRebacRelation = `-- name: CreateRebacRelation :one
|
|
INSERT INTO rebac_relations (resource_id, subject_user_id, role, granted_by)
|
|
VALUES ($1, $2, $3, $4)
|
|
RETURNING id, resource_id, subject_user_id, role, granted_by, created_at
|
|
`
|
|
|
|
type CreateRebacRelationParams struct {
|
|
ResourceID uuid.UUID `json:"resource_id"`
|
|
SubjectUserID uuid.UUID `json:"subject_user_id"`
|
|
Role string `json:"role"`
|
|
GrantedBy uuid.UUID `json:"granted_by"`
|
|
}
|
|
|
|
func (q *Queries) CreateRebacRelation(ctx context.Context, arg CreateRebacRelationParams) (RebacRelation, error) {
|
|
row := q.db.QueryRowContext(ctx, createRebacRelation,
|
|
arg.ResourceID,
|
|
arg.SubjectUserID,
|
|
arg.Role,
|
|
arg.GrantedBy,
|
|
)
|
|
var i RebacRelation
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.ResourceID,
|
|
&i.SubjectUserID,
|
|
&i.Role,
|
|
&i.GrantedBy,
|
|
&i.CreatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const deleteRebacRelation = `-- name: DeleteRebacRelation :exec
|
|
DELETE FROM rebac_relations
|
|
WHERE resource_id = $1 AND subject_user_id = $2
|
|
`
|
|
|
|
type DeleteRebacRelationParams struct {
|
|
ResourceID uuid.UUID `json:"resource_id"`
|
|
SubjectUserID uuid.UUID `json:"subject_user_id"`
|
|
}
|
|
|
|
func (q *Queries) DeleteRebacRelation(ctx context.Context, arg DeleteRebacRelationParams) error {
|
|
_, err := q.db.ExecContext(ctx, deleteRebacRelation, arg.ResourceID, arg.SubjectUserID)
|
|
return err
|
|
}
|
|
|
|
const deleteRebacRelationsByResource = `-- name: DeleteRebacRelationsByResource :exec
|
|
DELETE FROM rebac_relations
|
|
WHERE resource_id = $1
|
|
`
|
|
|
|
func (q *Queries) DeleteRebacRelationsByResource(ctx context.Context, resourceID uuid.UUID) error {
|
|
_, err := q.db.ExecContext(ctx, deleteRebacRelationsByResource, resourceID)
|
|
return err
|
|
}
|
|
|
|
const getRebacRelation = `-- name: GetRebacRelation :one
|
|
SELECT id, resource_id, subject_user_id, role, granted_by, created_at FROM rebac_relations
|
|
WHERE resource_id = $1 AND subject_user_id = $2
|
|
LIMIT 1
|
|
`
|
|
|
|
type GetRebacRelationParams struct {
|
|
ResourceID uuid.UUID `json:"resource_id"`
|
|
SubjectUserID uuid.UUID `json:"subject_user_id"`
|
|
}
|
|
|
|
func (q *Queries) GetRebacRelation(ctx context.Context, arg GetRebacRelationParams) (RebacRelation, error) {
|
|
row := q.db.QueryRowContext(ctx, getRebacRelation, arg.ResourceID, arg.SubjectUserID)
|
|
var i RebacRelation
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.ResourceID,
|
|
&i.SubjectUserID,
|
|
&i.Role,
|
|
&i.GrantedBy,
|
|
&i.CreatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const hasRebacRelation = `-- name: HasRebacRelation :one
|
|
SELECT EXISTS(
|
|
SELECT 1 FROM rebac_relations
|
|
WHERE resource_id = $1 AND subject_user_id = $2 AND role = $3
|
|
)
|
|
`
|
|
|
|
type HasRebacRelationParams struct {
|
|
ResourceID uuid.UUID `json:"resource_id"`
|
|
SubjectUserID uuid.UUID `json:"subject_user_id"`
|
|
Role string `json:"role"`
|
|
}
|
|
|
|
func (q *Queries) HasRebacRelation(ctx context.Context, arg HasRebacRelationParams) (bool, error) {
|
|
row := q.db.QueryRowContext(ctx, hasRebacRelation, arg.ResourceID, arg.SubjectUserID, arg.Role)
|
|
var exists bool
|
|
err := row.Scan(&exists)
|
|
return exists, err
|
|
}
|
|
|
|
const listRebacRelationsByResource = `-- name: ListRebacRelationsByResource :many
|
|
SELECT id, resource_id, subject_user_id, role, granted_by, created_at FROM rebac_relations
|
|
WHERE resource_id = $1
|
|
ORDER BY created_at ASC
|
|
`
|
|
|
|
func (q *Queries) ListRebacRelationsByResource(ctx context.Context, resourceID uuid.UUID) ([]RebacRelation, error) {
|
|
rows, err := q.db.QueryContext(ctx, listRebacRelationsByResource, resourceID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []RebacRelation
|
|
for rows.Next() {
|
|
var i RebacRelation
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.ResourceID,
|
|
&i.SubjectUserID,
|
|
&i.Role,
|
|
&i.GrantedBy,
|
|
&i.CreatedAt,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const listRebacRelationsBySubject = `-- name: ListRebacRelationsBySubject :many
|
|
SELECT id, resource_id, subject_user_id, role, granted_by, created_at FROM rebac_relations
|
|
WHERE subject_user_id = $1
|
|
ORDER BY created_at ASC
|
|
`
|
|
|
|
func (q *Queries) ListRebacRelationsBySubject(ctx context.Context, subjectUserID uuid.UUID) ([]RebacRelation, error) {
|
|
rows, err := q.db.QueryContext(ctx, listRebacRelationsBySubject, subjectUserID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []RebacRelation
|
|
for rows.Next() {
|
|
var i RebacRelation
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.ResourceID,
|
|
&i.SubjectUserID,
|
|
&i.Role,
|
|
&i.GrantedBy,
|
|
&i.CreatedAt,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const resolveEffectiveRole = `-- name: ResolveEffectiveRole :one
|
|
SELECT resolve_effective_role($1, $2) AS role
|
|
`
|
|
|
|
type ResolveEffectiveRoleParams struct {
|
|
PUserID uuid.UUID `json:"p_user_id"`
|
|
PResourceID uuid.UUID `json:"p_resource_id"`
|
|
}
|
|
|
|
func (q *Queries) ResolveEffectiveRole(ctx context.Context, arg ResolveEffectiveRoleParams) (string, error) {
|
|
row := q.db.QueryRowContext(ctx, resolveEffectiveRole, arg.PUserID, arg.PResourceID)
|
|
var role string
|
|
err := row.Scan(&role)
|
|
return role, err
|
|
}
|