Privilege implementation change

- privilege_registry.json has been removed
- PrivilegeProvider class has been removed
- default privileges for nodes are now hard-coded
- privilege overriding feature is not yet implemented

Change-Id: Ic9fdfa1c692c1abd26e339e2a8c702fc4aebd19f
Signed-off-by: Borawski.Lukasz <lukasz.borawski@intel.com>
diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index ceb5135..5cbc034 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -19,11 +19,19 @@
 
 namespace redfish {
 
+static OperationMap accountServiceOpMap = {
+    {crow::HTTPMethod::GET, {{"ConfigureUsers"}, {"ConfigureManager"}}},
+    {crow::HTTPMethod::HEAD, {{"Login"}}},
+    {crow::HTTPMethod::PATCH, {{"ConfigureUsers"}}},
+    {crow::HTTPMethod::PUT, {{"ConfigureUsers"}}},
+    {crow::HTTPMethod::DELETE, {{"ConfigureUsers"}}},
+    {crow::HTTPMethod::POST, {{"ConfigureUsers"}}}};
+
 class AccountService : public Node {
  public:
-  template <typename CrowApp, typename PrivilegeProvider>
-  AccountService(CrowApp& app, PrivilegeProvider& provider)
-      : Node(app, provider, "#AccountService.v1_1_0.AccountService",
+  template <typename CrowApp>
+  AccountService(CrowApp& app)
+      : Node(app, EntityPrivileges(std::move(accountServiceOpMap)),
              "/redfish/v1/AccountService/") {
     nodeJson["@odata.id"] = "/redfish/v1/AccountService";
     nodeJson["@odata.type"] = "#AccountService.v1_1_0.AccountService";
diff --git a/redfish-core/lib/redfish_sessions.hpp b/redfish-core/lib/redfish_sessions.hpp
index 11cde72..58d5b94 100644
--- a/redfish-core/lib/redfish_sessions.hpp
+++ b/redfish-core/lib/redfish_sessions.hpp
@@ -14,19 +14,35 @@
 // limitations under the License.
 */
 #pragma once
-#include <tuple>
+
 #include "node.hpp"
 #include "session_storage_singleton.hpp"
 
 namespace redfish {
 
+static OperationMap sessionOpMap = {
+    {crow::HTTPMethod::GET, {{"Login"}}},
+    {crow::HTTPMethod::HEAD, {{"Login"}}},
+    {crow::HTTPMethod::PATCH, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::PUT, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::DELETE, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::POST, {{"ConfigureManager"}}}};
+
+static OperationMap sessionCollectionOpMap = {
+    {crow::HTTPMethod::GET, {{"Login"}}},
+    {crow::HTTPMethod::HEAD, {{"Login"}}},
+    {crow::HTTPMethod::PATCH, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::PUT, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::DELETE, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::POST, {{}}}};
+
 class SessionCollection;
 
 class Sessions : public Node {
  public:
-  template <typename CrowApp, typename PrivilegeProvider>
-  Sessions(CrowApp& app, PrivilegeProvider& provider)
-      : Node(app, provider, "#Session.v1_0_2.Session",
+  template <typename CrowApp>
+  Sessions(CrowApp& app)
+      : Node(app, EntityPrivileges(std::move(sessionOpMap)),
              "/redfish/v1/SessionService/Sessions/<str>", std::string()) {
     nodeJson["@odata.type"] = "#Session.v1_0_2.Session";
     nodeJson["@odata.context"] = "/redfish/v1/$metadata#Session.Session";
@@ -90,11 +106,11 @@
 
 class SessionCollection : public Node {
  public:
-  template <typename CrowApp, typename PrivilegeProvider>
-  SessionCollection(CrowApp& app, PrivilegeProvider& provider)
-      : Node(app, provider, "#SessionCollection.SessionCollection",
+  template <typename CrowApp>
+  SessionCollection(CrowApp& app)
+      : Node(app, EntityPrivileges(std::move(sessionCollectionOpMap)),
              "/redfish/v1/SessionService/Sessions/"),
-        memberSession(app, provider) {
+        memberSession(app) {
     nodeJson["@odata.type"] = "#SessionCollection.SessionCollection";
     nodeJson["@odata.id"] = "/redfish/v1/SessionService/Sessions/";
     nodeJson["@odata.context"] =
@@ -127,7 +143,6 @@
               const std::vector<std::string>& params) override {
     std::string username;
     bool userAuthSuccessful = authenticateUser(req, &res.code, &username);
-
     if (!userAuthSuccessful) {
       res.end();
       return;
diff --git a/redfish-core/lib/roles.hpp b/redfish-core/lib/roles.hpp
index d912e88..6a3c0d7 100644
--- a/redfish-core/lib/roles.hpp
+++ b/redfish-core/lib/roles.hpp
@@ -15,16 +15,31 @@
 */
 #pragma once
 
-#include <vector>
 #include "node.hpp"
 
 namespace redfish {
 
+static OperationMap roleOpMap = {
+    {crow::HTTPMethod::GET, {{"Login"}}},
+    {crow::HTTPMethod::HEAD, {{"Login"}}},
+    {crow::HTTPMethod::PATCH, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::PUT, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::DELETE, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::POST, {{"ConfigureManager"}}}};
+
+static OperationMap roleCollectionOpMap = {
+    {crow::HTTPMethod::GET, {{"Login"}}},
+    {crow::HTTPMethod::HEAD, {{"Login"}}},
+    {crow::HTTPMethod::PATCH, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::PUT, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::DELETE, {{"ConfigureManager"}}},
+    {crow::HTTPMethod::POST, {{"ConfigureManager"}}}};
+
 class Roles : public Node {
  public:
-  template <typename CrowApp, typename PrivilegeProvider>
-  Roles(CrowApp& app, PrivilegeProvider& provider)
-      : Node(app, provider, "#Role.v1_0_2.Role",
+  template <typename CrowApp>
+  Roles(CrowApp& app)
+      : Node(app, EntityPrivileges(std::move(roleOpMap)),
              "/redfish/v1/AccountService/Roles/Administrator/") {
     nodeJson["@odata.id"] = "/redfish/v1/AccountService/Roles/Administrator";
     nodeJson["@odata.type"] = "#Role.v1_0_2.Role";
@@ -51,9 +66,9 @@
 
 class RoleCollection : public Node {
  public:
-  template <typename CrowApp, typename PrivilegeProvider>
-  RoleCollection(CrowApp& app, PrivilegeProvider& provider)
-      : Node(app, provider, "#RoleCollection.RoleCollection",
+  template <typename CrowApp>
+  RoleCollection(CrowApp& app)
+      : Node(app, EntityPrivileges(std::move(roleCollectionOpMap)),
              "/redfish/v1/AccountService/Roles/") {
     nodeJson["@odata.id"] = "/redfish/v1/AccountService/Roles";
     nodeJson["@odata.type"] = "#RoleCollection.RoleCollection";
diff --git a/redfish-core/lib/service_root.hpp b/redfish-core/lib/service_root.hpp
index cdb0000..24ad79d 100644
--- a/redfish-core/lib/service_root.hpp
+++ b/redfish-core/lib/service_root.hpp
@@ -19,11 +19,20 @@
 
 namespace redfish {
 
+static OperationMap serviceRootOpMap = {
+    {crow::HTTPMethod::GET, {{}}},
+    {crow::HTTPMethod::HEAD, {{}}},
+    {crow::HTTPMethod::PATCH, {{"ConfigureComponents"}}},
+    {crow::HTTPMethod::PUT, {{"ConfigureComponents"}}},
+    {crow::HTTPMethod::DELETE, {{"ConfigureComponents"}}},
+    {crow::HTTPMethod::POST, {{"ConfigureComponents"}}}};
+
 class ServiceRoot : public Node {
  public:
-  template <typename CrowApp, typename PrivilegeProvider>
-  ServiceRoot(CrowApp& app, PrivilegeProvider& provider)
-      : Node(app, provider, "#ServiceRoot.v1_1_1.ServiceRoot", "/redfish/v1/") {
+  template <typename CrowApp>
+  ServiceRoot(CrowApp& app)
+      : Node(app, EntityPrivileges(std::move(serviceRootOpMap)),
+             "/redfish/v1/") {
     nodeJson["@odata.type"] = "#ServiceRoot.v1_1_1.ServiceRoot";
     nodeJson["@odata.id"] = "/redfish/v1";
     nodeJson["@odata.context"] =