Optimize RBAC service loading
This commit is contained in:
+12
-1
@@ -17,6 +17,7 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/logger"
|
||||
"github.com/cortezaproject/corteza-server/pkg/mail"
|
||||
"github.com/cortezaproject/corteza-server/pkg/monitor"
|
||||
"github.com/cortezaproject/corteza-server/pkg/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/scheduler"
|
||||
"github.com/cortezaproject/corteza-server/pkg/sentry"
|
||||
"github.com/cortezaproject/corteza-server/provision/compose"
|
||||
@@ -149,7 +150,6 @@ func (app *CortezaApp) InitServices(ctx context.Context) (err error) {
|
||||
return nil
|
||||
} else if err := app.InitStore(ctx); err != nil {
|
||||
return err
|
||||
|
||||
}
|
||||
|
||||
ctx = actionlog.RequestOriginToContext(ctx, actionlog.RequestOrigin_APP_Init)
|
||||
@@ -162,6 +162,17 @@ func (app *CortezaApp) InitServices(ctx context.Context) (err error) {
|
||||
corredor.Service().SetUserFinder(sysService.DefaultUser)
|
||||
corredor.Service().SetRoleFinder(sysService.DefaultRole)
|
||||
|
||||
{
|
||||
// Initialize RBAC subsystem
|
||||
// and (re)load rules from the storage backend
|
||||
err = permissions.Initialize(app.Log, app.Store)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
permissions.Global().Reload(ctx)
|
||||
}
|
||||
|
||||
// Initializes system services
|
||||
//
|
||||
// Note: this is a legacy approach, all services from all 3 apps
|
||||
|
||||
@@ -113,7 +113,7 @@ func Initialize(ctx context.Context, log *zap.Logger, s store.Storer, c Config)
|
||||
if DefaultPermissions == nil {
|
||||
// Do not override permissions service stored under DefaultPermissions
|
||||
// to allow integration tests to inject own permission service
|
||||
DefaultPermissions = permissions.Service(ctx, DefaultLogger, s)
|
||||
DefaultPermissions = permissions.Global()
|
||||
}
|
||||
|
||||
DefaultAccessControl = AccessControl(DefaultPermissions)
|
||||
|
||||
@@ -93,7 +93,7 @@ func Initialize(ctx context.Context, log *zap.Logger, s store.Storer, c Config)
|
||||
if DefaultPermissions == nil {
|
||||
// Do not override permissions service stored under DefaultPermissions
|
||||
// to allow integration tests to inject own permission service
|
||||
DefaultPermissions = permissions.Service(ctx, DefaultLogger, s)
|
||||
DefaultPermissions = permissions.Global()
|
||||
}
|
||||
|
||||
DefaultAccessControl = AccessControl(DefaultPermissions)
|
||||
|
||||
@@ -26,24 +26,43 @@ type (
|
||||
RuleFilter struct{}
|
||||
)
|
||||
|
||||
var (
|
||||
// Global permissioning service
|
||||
gRBAC *service
|
||||
)
|
||||
|
||||
const (
|
||||
watchInterval = time.Hour
|
||||
)
|
||||
|
||||
// Service initializes service{} struct
|
||||
// Global returns global RBAC service
|
||||
func Global() *service {
|
||||
return gRBAC
|
||||
}
|
||||
|
||||
func Initialize(logger *zap.Logger, s rbacRulesStore) error {
|
||||
if gRBAC != nil {
|
||||
// Prevent multiple initializations
|
||||
return nil
|
||||
}
|
||||
|
||||
gRBAC = NewService(logger, s)
|
||||
return nil
|
||||
}
|
||||
|
||||
// NewService initializes service{} struct
|
||||
//
|
||||
// service{} struct preloads, checks, grants and flushes privileges to and from store
|
||||
// It acts as a caching layer
|
||||
func Service(ctx context.Context, logger *zap.Logger, s rbacRulesStore) (svc *service) {
|
||||
func NewService(logger *zap.Logger, s rbacRulesStore) (svc *service) {
|
||||
svc = &service{
|
||||
l: &sync.Mutex{},
|
||||
f: make(chan bool),
|
||||
|
||||
logger: logger.Named("permissions"),
|
||||
logger: logger.Named("rbac"),
|
||||
store: s,
|
||||
}
|
||||
|
||||
svc.Reload(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ func Initialize(ctx context.Context, log *zap.Logger, s store.Storer, c Config)
|
||||
if DefaultPermissions == nil {
|
||||
// Do not override permissions service stored under DefaultPermissions
|
||||
// to allow integration tests to inject own permission service
|
||||
DefaultPermissions = permissions.Service(ctx, DefaultLogger, DefaultStore)
|
||||
DefaultPermissions = permissions.Global()
|
||||
}
|
||||
|
||||
DefaultAccessControl = AccessControl(DefaultPermissions)
|
||||
|
||||
Reference in New Issue
Block a user