33 lines
777 B
Go
33 lines
777 B
Go
|
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
|
||
|
}
|