[#69] object/acl: Construct service from options

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2020-10-03 08:19:22 +03:00 committed by Alex Vanin
parent e5898c9ca8
commit 30e6912c7b
3 changed files with 74 additions and 28 deletions

View file

@ -16,9 +16,7 @@ import (
type (
// Service checks basic ACL rules.
Service struct {
containers core.Source
sender SenderClassifier
next object.Service
*cfg
}
putStreamBasicChecker struct {
@ -47,6 +45,17 @@ type (
}
)
// Option represents Service constructor option.
type Option func(*cfg)
type cfg struct {
containers core.Source
sender SenderClassifier
next object.Service
}
var (
ErrMalformedRequest = errors.New("malformed request")
ErrUnknownRole = errors.New("can't classify request sender")
@ -54,16 +63,20 @@ var (
ErrBasicAccessDenied = errors.New("access denied by basic acl")
)
func defaultCfg() *cfg {
return new(cfg)
}
// New is a constructor for object ACL checking service.
func New(
c SenderClassifier,
cnr core.Source,
next object.Service) Service {
func New(opts ...Option) Service {
cfg := defaultCfg()
for i := range opts {
opts[i](cfg)
}
return Service{
containers: cnr,
sender: c,
next: next,
cfg: cfg,
}
}