52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package native
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tech/sendico/pkg/auth/management"
|
|
"github.com/tech/sendico/pkg/db/policy"
|
|
"github.com/tech/sendico/pkg/db/role"
|
|
"github.com/tech/sendico/pkg/mlogger"
|
|
"github.com/tech/sendico/pkg/model"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// NativeManager implements the auth.Manager interface by aggregating Role and Permission managers.
|
|
type NativeManager struct {
|
|
logger mlogger.Logger
|
|
roleManager management.Role
|
|
permManager management.Permission
|
|
}
|
|
|
|
// NewManager creates a new CasbinManager with specified domains and role-domain mappings.
|
|
func NewManager(
|
|
l mlogger.Logger,
|
|
pdb policy.DB,
|
|
rdb role.DB,
|
|
enforcer *Enforcer,
|
|
) (*NativeManager, error) {
|
|
logger := l.Named("manager")
|
|
|
|
var pdesc model.PolicyDescription
|
|
if err := pdb.GetBuiltInPolicy(context.Background(), "roles", &pdesc); err != nil {
|
|
logger.Warn("Failed to fetch roles permission reference", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
return &NativeManager{
|
|
logger: logger,
|
|
roleManager: NewRoleManager(logger, enforcer, pdesc.ID, rdb),
|
|
permManager: NewPermissionManager(logger, enforcer),
|
|
}, nil
|
|
}
|
|
|
|
// Permission returns the Permission manager.
|
|
func (m *NativeManager) Permission() management.Permission {
|
|
return m.permManager
|
|
}
|
|
|
|
// Role returns the Role manager.
|
|
func (m *NativeManager) Role() management.Role {
|
|
return m.roleManager
|
|
}
|