blob: b58dd5c53803ba84135b269a28ce935f4884b3b4 [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_RESOURCE_URI_OVERRIDE_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_RESOURCE_URI_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_privileges.h"
namespace milotic::authz {
/*
ResourceUriOverride 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
"ResourceUriOverride": {
"Targets": [
"/redfish/v1/Manager/Chassis/1",
],
"OperationMap": {
...
}
}
This resource uri override above only applies to URIs who match one of the
elements in the target list. Since the redfish route has a wildcard on
Chassis/<str>, it routes all of the Chassis through the same privileges, but if
we wanted to override the privilege on Chassis/1, this above override would do
so.
*/
class ResourceUriOverride : public Override {
public:
ResourceUriOverride(
const std::vector<std::string>& targets,
const absl::flat_hash_map<ecclesia::Operation,
std::vector<RedfishPrivileges>>& operation_map)
: Override(targets, operation_map) {}
bool IsApplicable(absl::string_view uri,
ecclesia::Operation operation) const override;
Override::Type GetOverrideType() const override;
};
} // namespace milotic::authz
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_RESOURCE_URI_OVERRIDE_H_