52 lines
2.0 KiB
Go
52 lines
2.0 KiB
Go
package auth
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tech/sendico/pkg/db/policy"
|
|
"github.com/tech/sendico/pkg/db/repository/builder"
|
|
"github.com/tech/sendico/pkg/db/template"
|
|
"github.com/tech/sendico/pkg/mlogger"
|
|
"github.com/tech/sendico/pkg/model"
|
|
"github.com/tech/sendico/pkg/mservice"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type AccountBoundDB[T model.AccountBoundStorable] interface {
|
|
Create(ctx context.Context, accountRef primitive.ObjectID, object T) error
|
|
Get(ctx context.Context, accountRef, objectRef primitive.ObjectID, result T) error
|
|
Update(ctx context.Context, accountRef primitive.ObjectID, object T) error
|
|
Patch(ctx context.Context, accountRef, objectRef primitive.ObjectID, patch builder.Patch) error
|
|
Delete(ctx context.Context, accountRef, objectRef primitive.ObjectID) error
|
|
DeleteMany(ctx context.Context, accountRef primitive.ObjectID, query builder.Query) error
|
|
FindOne(ctx context.Context, accountRef primitive.ObjectID, query builder.Query, result T) error
|
|
ListIDs(ctx context.Context, accountRef primitive.ObjectID, query builder.Query) ([]primitive.ObjectID, error)
|
|
ListAccountBound(ctx context.Context, accountRef, organizationRef primitive.ObjectID, query builder.Query) ([]model.AccountBoundStorable, error)
|
|
}
|
|
|
|
func CreateAccountBound[T model.AccountBoundStorable](
|
|
ctx context.Context,
|
|
logger mlogger.Logger,
|
|
pdb policy.DB,
|
|
enforcer Enforcer,
|
|
collection mservice.Type,
|
|
db *mongo.Database,
|
|
) (AccountBoundDB[T], error) {
|
|
logger = logger.Named("account_bound")
|
|
var policy model.PolicyDescription
|
|
if err := pdb.GetBuiltInPolicy(ctx, mservice.Organizations, &policy); err != nil {
|
|
logger.Warn("Failed to fetch organization policy description", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
res := &AccountBoundDBImp[T]{
|
|
Logger: logger,
|
|
DBImp: template.Create[T](logger, collection, db),
|
|
Enforcer: enforcer,
|
|
PermissionRef: policy.ID,
|
|
Collection: collection,
|
|
}
|
|
return res, nil
|
|
}
|