blob: 355b52a69677ed457f01a9e84bbeea7f8aceb897 [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_SUBORDINATE_OVERRIDE_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_SUBORDINATE_OVERRIDE_H_
#include <string>
#include <vector>
#include "absl/container/flat_hash_map.h"
#include "absl/strings/string_view.h"
#include "authorizer_enums.h"
#include "override.h"
#include "redfish_entity_trie.h"
#include "redfish_privileges.h"
namespace milotic::authz {
/*
SubordinateOverride is a special type of override that checks whether the
request's uri is a subordinate of the target list.
Example: Imagine this below is part of the Ethernet entity mapping
"SubordinateOverride": {
"Targets": [
"Manager",
"EthernetInterfaceCollection",
],
"OperationMap": {
...
}
}
This subordinate override above only applies to URIs who have a parent entity
type of EthernetInterfaceCollection and a grandparent entity type of Manager.
*/
class SubordinateOverride : public Override {
public:
SubordinateOverride(
const std::vector<std::string>& targets,
const absl::flat_hash_map<ecclesia::Operation,
std::vector<RedfishPrivileges>>& operation_map,
RedfishEntityTrie& trie)
: Override(targets, operation_map), redfish_entity_trie_(trie) {}
bool IsApplicable(absl::string_view uri,
ecclesia::Operation operation) const override;
Override::Type GetOverrideType() const override;
private:
RedfishEntityTrie& redfish_entity_trie_;
};
} // namespace milotic::authz
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_SUBORDINATE_OVERRIDE_H_