blob: 9d5b3db62fb7431a3c2bc2cac18c18b1ab8fc5a2 [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_REDFISH_PRIVILEGES_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_REDFISH_PRIVILEGES_H_
#include <initializer_list>
#include <string>
#include <string_view>
#include <unordered_set>
#include "nlohmann/json.hpp"
namespace milotic::authz {
/*
Class to represent redfish privileges.
These directly represent user privileges and help represent entity privileges.
Each incoming request requires a comparison between privileges held by the user
issuing a request and the target entity's privileges
*/
class RedfishPrivileges {
public:
// Creating default and initializer list constructor for ease of creation
RedfishPrivileges() = default;
RedfishPrivileges(std::initializer_list<std::string> privileges)
: privileges_(privileges.begin(), privileges.end()) {}
RedfishPrivileges(const std::unordered_set<std::string>& privileges)
: privileges_(privileges) {}
bool IsSupersetOf(const RedfishPrivileges& other) const;
std::unordered_set<std::string> GetPrivileges() const;
void InsertPrivilege(std::string_view privilege);
nlohmann::json::object_t ToJson() const;
std::string GetDebugString() const;
bool operator==(const RedfishPrivileges& other) const;
// go/absl-hash
template <typename H>
friend H AbslHashValue(H h, const RedfishPrivileges& p) {
return H::combine(std::move(h), p.privileges_);
}
private:
std::unordered_set<std::string> privileges_;
};
} // namespace milotic::authz
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_REDFISH_PRIVILEGES_H_