diff --git a/redfish-core/include/privileges.hpp b/redfish-core/include/privileges.hpp
index 08e554a..bb2c2f3 100644
--- a/redfish-core/include/privileges.hpp
+++ b/redfish-core/include/privileges.hpp
@@ -16,6 +16,7 @@
 #pragma once
 
 #include "logging.hpp"
+#include "sessions.hpp"
 
 #include <boost/beast/http/verb.hpp>
 #include <boost/container/flat_map.hpp>
@@ -53,10 +54,15 @@
 /** @brief Max number of privileges per type  */
 constexpr const size_t maxPrivilegeCount = 32;
 
-/** @brief A vector of all privilege names and their indexes */
+/**
+ * @brief A vector of all privilege names and their indexes
+ * The privilege "OpenBMCHostConsole" is added to users who are members of the
+ * "hostconsole" user group. This privilege is required to access the host
+ * console.
+ */
 static const std::array<std::string, maxPrivilegeCount> privilegeNames{
-    "Login", "ConfigureManager", "ConfigureComponents", "ConfigureSelf",
-    "ConfigureUsers"};
+    "Login",         "ConfigureManager", "ConfigureComponents",
+    "ConfigureSelf", "ConfigureUsers",   "OpenBMCHostConsole"};
 
 /**
  * @brief Redfish privileges
@@ -214,30 +220,46 @@
     std::bitset<maxPrivilegeCount> privilegeBitset = 0;
 };
 
-inline const Privileges& getUserPrivileges(const std::string& userRole)
+inline Privileges getUserPrivileges(const persistent_data::UserSession& session)
 {
-    // Redfish privilege : Administrator
-    if (userRole == "priv-admin")
+    // default to no access
+    Privileges privs;
+
+    // Check if user is member of hostconsole group
+    for (const auto& userGroup : session.userGroups)
     {
-        static Privileges admin{"Login", "ConfigureManager", "ConfigureSelf",
-                                "ConfigureUsers", "ConfigureComponents"};
-        return admin;
+        if (userGroup == "hostconsole")
+        {
+            // Redfish privilege : host console access
+            privs.setSinglePrivilege("OpenBMCHostConsole");
+            break;
+        }
     }
-    if (userRole == "priv-operator")
+
+    if (session.userRole == "priv-admin")
+    {
+        // Redfish privilege : Administrator
+        privs.setSinglePrivilege("Login");
+        privs.setSinglePrivilege("ConfigureManager");
+        privs.setSinglePrivilege("ConfigureSelf");
+        privs.setSinglePrivilege("ConfigureUsers");
+        privs.setSinglePrivilege("ConfigureComponents");
+    }
+    else if (session.userRole == "priv-operator")
     {
         // Redfish privilege : Operator
-        static Privileges op{"Login", "ConfigureSelf", "ConfigureComponents"};
-        return op;
+        privs.setSinglePrivilege("Login");
+        privs.setSinglePrivilege("ConfigureSelf");
+        privs.setSinglePrivilege("ConfigureComponents");
     }
-    if (userRole == "priv-user")
+    else if (session.userRole == "priv-user")
     {
         // Redfish privilege : Readonly
-        static Privileges readOnly{"Login", "ConfigureSelf"};
-        return readOnly;
+        privs.setSinglePrivilege("Login");
+        privs.setSinglePrivilege("ConfigureSelf");
     }
-    // Redfish privilege : NoAccess
-    static Privileges noaccess;
-    return noaccess;
+
+    return privs;
 }
 
 /**
