From 6e9f7445ac3cd5abd8df675b5b2bee50f4d51276 Mon Sep 17 00:00:00 2001 From: Pedro Costa <550684+pnmcosta@users.noreply.github.com> Date: Fri, 21 Feb 2025 15:33:47 +0000 Subject: [PATCH] base manager start --- core/go.mod | 5 +++ core/go.sum | 0 core/manager.go | 98 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 core/go.mod create mode 100644 core/go.sum create mode 100644 core/manager.go diff --git a/core/go.mod b/core/go.mod new file mode 100644 index 0000000..d8313c8 --- /dev/null +++ b/core/go.mod @@ -0,0 +1,5 @@ +module github.com/netbirdio/management-integrations/core + +go 1.23.0 + +toolchain go1.23.5 diff --git a/core/go.sum b/core/go.sum new file mode 100644 index 0000000..e69de29 diff --git a/core/manager.go b/core/manager.go new file mode 100644 index 0000000..871549b --- /dev/null +++ b/core/manager.go @@ -0,0 +1,98 @@ +package core + +import ( + "context" + "errors" +) + +type Module string + +const ( + Networks Module = "networks" + Peers Module = "peers" + Groups Module = "groups" +) + +type Operation string + +const ( + Read Operation = "read" + Write Operation = "write" +) + +// @todo move types.UserRole here + +var ( + ErrUserNotFound = errors.New("user not found") + ErrUserNotInAccount = errors.New("user does not belong to account") + ErrUserRoleInvalid = errors.New("invalid role") + + ErrSettingsFailedToGet = errors.New("failed to get settings") +) + +type BaseManager struct { + module Module +} + +func NewBaseManager(module Module) BaseManager { + return BaseManager{ + module: module, + } +} + +func (m *BaseManager) ValidatePermissions(ctx context.Context, operation Operation) error { + // auth, err := nbcontext.GetUserAuthFromContext(ctx) + // if err != nil { + // return status.NewPermissionValidationError(err) + // } + + // user, err := m.store.GetUserByUserID(ctx, store.LockingStrengthShare, auth.UserId) + // if err != nil { + // return status.NewPermissionValidationError(err) + // } + + // if user == nil { + // return status.NewPermissionValidationError(ErrUserNotFound) + // } + + // if user.AccountID != auth.AccountId { + // return status.NewPermissionValidationError(ErrUserNotInAccount) + // } + + // if user.Blocked { + // return status.NewPermissionDeniedError() + // } + + // switch user.Role { + // case types.UserRoleAdmin, types.UserRoleOwner: + // return nil + // case types.UserRoleUser: + // return m.validateRegularUserPermissions(ctx, auth.AccountId, operation) + // case types.UserRoleBillingAdmin: + // return status.NewPermissionDeniedError() + // default: + // return status.NewPermissionValidationError(ErrUserRoleInvalid) + // } + return nil +} + +func (m *BaseManager) validateRegularUserPermissions(ctx context.Context, accountId string, operation Operation) error { + // settings, err := m.store.GetAccountSettings(ctx, store.LockingStrengthShare, accountId) + // if err != nil { + // return status.NewPermissionValidationError(fmt.Errorf("%w: %w", ErrSettingsFailedToGet, err)) + // } + // if settings.RegularUsersViewBlocked { + // return status.NewPermissionDeniedError() + // } + + // if operation == Write { + // return status.NewPermissionDeniedError() + // } + + // if m.module == Peers { + // return nil + // } + + // return status.NewPermissionDeniedError() + return nil +}