Documentation
¶
Overview ¶
Package user manages users and tenant membership metadata.
Index ¶
- Constants
- Variables
- type Member
- type MemberListFilter
- type MemoryService
- func (service *MemoryService) AddMember(ctx context.Context, member Member) error
- func (service *MemoryService) CreateUser(ctx context.Context, user User) error
- func (service *MemoryService) GetMember(ctx context.Context, tenantID types.TenantID, userID string) (Member, error)
- func (service *MemoryService) GetUser(ctx context.Context, id string) (User, error)
- func (service *MemoryService) ListMembers(ctx context.Context, tenantID types.TenantID) ([]Member, error)
- func (service *MemoryService) ListMembersPage(ctx context.Context, tenantID types.TenantID, filter MemberListFilter) ([]Member, error)
- func (service *MemoryService) RemoveMember(ctx context.Context, tenantID types.TenantID, userID string) error
- type PagedService
- type SQLDialect
- type SQLStore
- func (store *SQLStore) AddMember(ctx context.Context, member Member) error
- func (store *SQLStore) CreateUser(ctx context.Context, user User) error
- func (store *SQLStore) GetMember(ctx context.Context, tenantID types.TenantID, userID string) (Member, error)
- func (store *SQLStore) GetUser(ctx context.Context, id string) (User, error)
- func (store *SQLStore) ListMembers(ctx context.Context, tenantID types.TenantID) (members []Member, err error)
- func (store *SQLStore) ListMembersPage(ctx context.Context, tenantID types.TenantID, filter MemberListFilter) (members []Member, err error)
- func (store *SQLStore) RemoveMember(ctx context.Context, tenantID types.TenantID, userID string) error
- type SQLStoreOption
- type Service
- type User
Constants ¶
const ( // DefaultSQLUsersTableName is the default user table name. DefaultSQLUsersTableName = "biz_users" // DefaultSQLMembersTableName is the default tenant member table name. DefaultSQLMembersTableName = "biz_members" )
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 ¶
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 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) ListMembers ¶
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 ¶
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
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) CreateUser ¶ added in v0.1.6
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) 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.
type SQLStoreOption ¶ added in v0.1.6
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
}