mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-22 18:26:41 +00:00
[management] users roles endpoint
This commit is contained in:
@@ -1,27 +1,31 @@
|
||||
package users
|
||||
|
||||
//go:generate go run github.com/golang/mock/mockgen -package users -destination=manager_mock.go -source=./manager.go -build_flags=-mod=mod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/netbirdio/netbird/management/server/permissions"
|
||||
"github.com/netbirdio/netbird/management/server/permissions/roles"
|
||||
"github.com/netbirdio/netbird/management/server/status"
|
||||
"github.com/netbirdio/netbird/management/server/store"
|
||||
"github.com/netbirdio/netbird/management/server/types"
|
||||
)
|
||||
|
||||
type Manager interface {
|
||||
GetUser(ctx context.Context, userID string) (*types.User, error)
|
||||
GetRoles(ctx context.Context, accountId, userId string) (map[types.UserRole]roles.RolePermissions, error)
|
||||
}
|
||||
|
||||
type managerImpl struct {
|
||||
store store.Store
|
||||
store store.Store
|
||||
permissionsManager permissions.Manager
|
||||
}
|
||||
|
||||
type managerMock struct {
|
||||
}
|
||||
|
||||
func NewManager(store store.Store) Manager {
|
||||
func NewManager(store store.Store, permissionsManager permissions.Manager) Manager {
|
||||
return &managerImpl{
|
||||
store: store,
|
||||
store: store,
|
||||
permissionsManager: permissionsManager,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,21 +33,23 @@ func (m *managerImpl) GetUser(ctx context.Context, userID string) (*types.User,
|
||||
return m.store.GetUserByUserID(ctx, store.LockingStrengthShare, userID)
|
||||
}
|
||||
|
||||
func NewManagerMock() Manager {
|
||||
return &managerMock{}
|
||||
}
|
||||
|
||||
func (m *managerMock) GetUser(ctx context.Context, userID string) (*types.User, error) {
|
||||
switch userID {
|
||||
case "adminUser":
|
||||
return &types.User{Id: userID, Role: types.UserRoleAdmin}, nil
|
||||
case "regularUser":
|
||||
return &types.User{Id: userID, Role: types.UserRoleUser}, nil
|
||||
case "ownerUser":
|
||||
return &types.User{Id: userID, Role: types.UserRoleOwner}, nil
|
||||
case "billingUser":
|
||||
return &types.User{Id: userID, Role: types.UserRoleBillingAdmin}, nil
|
||||
default:
|
||||
return nil, errors.New("user not found")
|
||||
func (m *managerImpl) GetRoles(ctx context.Context, accountId, userId string) (map[types.UserRole]roles.RolePermissions, error) {
|
||||
user, err := m.store.GetUserByUserID(ctx, store.LockingStrengthShare, userId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if user.IsBlocked() {
|
||||
return nil, status.NewUserBlockedError()
|
||||
}
|
||||
|
||||
if user.IsServiceUser {
|
||||
return nil, status.NewPermissionDeniedError()
|
||||
}
|
||||
|
||||
if err := m.permissionsManager.ValidateAccountAccess(ctx, accountId, user, false); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return m.permissionsManager.GetPermissions(ctx), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user