return allowed ? Effect::Allow : Effect::Pass;
}
+bool Policy::has_conditional(const string& conditional, bool partial) const {
+ for (const auto&s: statements){
+ if (std::any_of(s.conditions.begin(), s.conditions.end(),
+ [&](const Condition& c) { return c.has_key(conditional, partial);}))
+ return true;
+ }
+ return false;
+}
+
ostream& operator <<(ostream& m, const Policy& p) {
m << "{ Version: "
<< (p.version == Version::v2008_10_17 ? "2008-10-17" : "2012-10-17");
}
return false;
}
+
+ bool has_key(const std::string& _key, bool partial=false) const {
+ if (partial)
+ return boost::algorithm::istarts_with(key, _key);
+ else
+ return boost::algorithm::iequals(key, _key);
+ }
};
std::ostream& operator <<(std::ostream& m, const Condition& c);
Effect eval(const Environment& e,
boost::optional<const rgw::auth::Identity&> ida,
std::uint64_t action, const ARN& resource) const;
+
+ bool has_conditional(const string& conditional, bool partial=false) const;
};
std::ostream& operator <<(ostream& m, const Policy& p);