abac/service.go

33 lines
777 B
Go
Raw Normal View History

package abac
import "context"
type Service struct {
store Store
policyEngine PolicyEngine
}
func NewService(store Store, policyEngine PolicyEngine) *Service {
return &Service{
store: store,
policyEngine: policyEngine,
}
}
func (service *Service) HasAccess(userID, resourceID string, action string) (bool, error) {
userAttributes, err := service.store.GetUserAttributes(userID)
if err != nil {
return false, err
}
resourceAttributes, err := service.store.GetResourceAttributes(resourceID)
if err != nil {
return false, err
}
ctx := context.Background()
decision := service.policyEngine.EvaluatePolicy(ctx, userAttributes, resourceAttributes, action)
return bool(decision), nil
}