SessionManager.h 847 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include <unordered_set>
  3. #include <unordered_map>
  4. #define RPC_ADMIN if (!m_sm.hasPrivilegeLevel(_session, Privilege::Admin)) throw jsonrpc::JsonRpcException("Invalid privileges");
  5. namespace dev
  6. {
  7. namespace rpc
  8. {
  9. enum class Privilege
  10. {
  11. Admin
  12. };
  13. }
  14. }
  15. namespace std
  16. {
  17. template<> struct hash<dev::rpc::Privilege>
  18. {
  19. size_t operator()(dev::rpc::Privilege _value) const { return (size_t)_value; }
  20. };
  21. }
  22. namespace dev
  23. {
  24. namespace rpc
  25. {
  26. struct SessionPermissions
  27. {
  28. std::unordered_set<Privilege> privileges;
  29. };
  30. class SessionManager
  31. {
  32. public:
  33. std::string newSession(SessionPermissions const& _p);
  34. void addSession(std::string const& _session, SessionPermissions const& _p);
  35. bool hasPrivilegeLevel(std::string const& _session, Privilege _l) const;
  36. private:
  37. std::unordered_map<std::string, SessionPermissions> m_sessions;
  38. };
  39. }
  40. }