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 }