user

package
v0.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 9, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package user manages users and tenant membership metadata.

Index

Constants

View Source
const (
	// DefaultSQLUsersTableName is the default user table name.
	DefaultSQLUsersTableName = "biz_users"

	// DefaultSQLMembersTableName is the default tenant member table name.
	DefaultSQLMembersTableName = "biz_members"
)
View Source
const (
	// SQLDialectMySQL uses question-mark placeholders and is the default.
	SQLDialectMySQL = sqlutil.DialectMySQL

	// SQLDialectSQLite uses question-mark placeholders.
	SQLDialectSQLite = sqlutil.DialectSQLite

	// SQLDialectPostgres uses numbered placeholders.
	SQLDialectPostgres = sqlutil.DialectPostgres
)

Variables

View Source
var (
	ErrInvalidUser    = errors.New("gotenancy/user: invalid user")
	ErrUserNotFound   = errors.New("gotenancy/user: user not found")
	ErrUserExists     = errors.New("gotenancy/user: user already exists")
	ErrMemberNotFound = errors.New("gotenancy/user: member not found")
	ErrMemberExists   = errors.New("gotenancy/user: member already exists")
	ErrTenantMismatch = errors.New("gotenancy/user: tenant mismatch")

	ErrInvalidListFilter = errors.New("gotenancy/user: invalid list filter")

	ErrNilDB = errors.New("gotenancy/user: nil db")

	ErrInvalidTableName = errors.New("gotenancy/user: invalid table name")

	ErrUnsupportedSQLDialect = errors.New("gotenancy/user: unsupported sql dialect")
)

Functions

This section is empty.

Types

type Member

type Member struct {
	TenantID types.TenantID
	UserID   string
	Roles    []string
}

Member binds a user to a tenant.

type MemberListFilter added in v0.1.6

type MemberListFilter struct {
	// Cursor returns rows ordered after the user ID cursor.
	Cursor string
	Limit  int
}

MemberListFilter restricts paged tenant membership list queries.

type MemoryService

type MemoryService struct {
	// contains filtered or unexported fields
}

func NewMemoryService

func NewMemoryService() *MemoryService

func (*MemoryService) AddMember

func (service *MemoryService) AddMember(ctx context.Context, member Member) error

func (*MemoryService) CreateUser

func (service *MemoryService) CreateUser(ctx context.Context, user User) error

func (*MemoryService) GetMember

func (service *MemoryService) GetMember(ctx context.Context, tenantID types.TenantID, userID string) (Member, error)

func (*MemoryService) GetUser

func (service *MemoryService) GetUser(ctx context.Context, id string) (User, error)

func (*MemoryService) ListMembers

func (service *MemoryService) ListMembers(ctx context.Context, tenantID types.TenantID) ([]Member, error)

func (*MemoryService) ListMembersPage added in v0.1.6

func (service *MemoryService) ListMembersPage(ctx context.Context, tenantID types.TenantID, filter MemberListFilter) ([]Member, error)

func (*MemoryService) RemoveMember

func (service *MemoryService) RemoveMember(ctx context.Context, tenantID types.TenantID, userID string) error

type PagedService added in v0.1.6

type PagedService interface {
	Service
	ListMembersPage(ctx context.Context, tenantID types.TenantID, filter MemberListFilter) ([]Member, error)
}

PagedService extends Service with cursor-based tenant membership listing.

type SQLDialect added in v0.1.6

type SQLDialect = sqlutil.Dialect

SQLDialect controls SQL placeholder rendering for SQLStore.

type SQLStore added in v0.1.6

type SQLStore struct {
	// contains filtered or unexported fields
}

SQLStore persists users and tenant memberships through database/sql.

The users table is expected to contain: id, email, name. The members table is expected to contain: tenant_id, user_id, roles. Use a unique key on members (tenant_id, user_id). The roles column stores a JSON array.

func NewSQLStore added in v0.1.6

func NewSQLStore(db *sql.DB, opts ...SQLStoreOption) (*SQLStore, error)

NewSQLStore creates a SQL-backed user service.

func (*SQLStore) AddMember added in v0.1.6

func (store *SQLStore) AddMember(ctx context.Context, member Member) error

AddMember inserts a tenant membership.

func (*SQLStore) CreateUser added in v0.1.6

func (store *SQLStore) CreateUser(ctx context.Context, user User) error

CreateUser inserts a user.

func (*SQLStore) GetMember added in v0.1.6

func (store *SQLStore) GetMember(ctx context.Context, tenantID types.TenantID, userID string) (Member, error)

GetMember returns a tenant membership by tenant and user ID.

func (*SQLStore) GetUser added in v0.1.6

func (store *SQLStore) GetUser(ctx context.Context, id string) (User, error)

GetUser returns a user by ID.

func (*SQLStore) ListMembers added in v0.1.6

func (store *SQLStore) ListMembers(ctx context.Context, tenantID types.TenantID) (members []Member, err error)

ListMembers returns tenant memberships ordered by user ID.

func (*SQLStore) ListMembersPage added in v0.1.6

func (store *SQLStore) ListMembersPage(ctx context.Context, tenantID types.TenantID, filter MemberListFilter) (members []Member, err error)

ListMembersPage returns a bounded page of tenant memberships ordered by user ID.

func (*SQLStore) RemoveMember added in v0.1.6

func (store *SQLStore) RemoveMember(ctx context.Context, tenantID types.TenantID, userID string) error

RemoveMember removes a tenant membership.

type SQLStoreOption added in v0.1.6

type SQLStoreOption func(*SQLStore) error

SQLStoreOption configures SQLStore.

func WithMembersTableName added in v0.1.6

func WithMembersTableName(table string) SQLStoreOption

WithMembersTableName overrides the default tenant member table name.

func WithSQLDialect added in v0.1.6

func WithSQLDialect(dialect SQLDialect) SQLStoreOption

WithSQLDialect configures SQL placeholder rendering.

func WithUsersTableName added in v0.1.6

func WithUsersTableName(table string) SQLStoreOption

WithUsersTableName overrides the default user table name.

type Service

type Service interface {
	CreateUser(ctx context.Context, user User) error
	GetUser(ctx context.Context, id string) (User, error)
	AddMember(ctx context.Context, member Member) error
	GetMember(ctx context.Context, tenantID types.TenantID, userID string) (Member, error)
	ListMembers(ctx context.Context, tenantID types.TenantID) ([]Member, error)
	RemoveMember(ctx context.Context, tenantID types.TenantID, userID string) error
}

type User

type User struct {
	ID    string
	Email string
	Name  string
}

User is an account that may belong to many tenants.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL