@Override
public ObjectAdapter executeWithRuleChecking(final ObjectAdapter target, final ObjectAdapter[] arguments, final AuthenticationSession authenticationSession, final Where where) {
// see it?
final Consent visibility = isVisible(authenticationSession, target, where);
if (visibility.isVetoed()) {
throw new AuthorizationException();
}
// use it?
final Consent usability = isUsable(authenticationSession, target, where);
if(usability.isVetoed()) {
throw new AuthorizationException();
}
// do it?
final Consent validity = isProposedArgumentSetValid(target, arguments);
if(validity.isVetoed()) {
throw new RecoverableException(validity.getReason());
}
return execute(target, arguments);
}