hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
permissions.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_SHARED_MODEL_PERMISSIONS_HPP
7 #define IROHA_SHARED_MODEL_PERMISSIONS_HPP
8 
9 #include <bitset>
10 #include <functional>
11 #include <initializer_list>
12 #include <string>
13 #include <string_view>
14 
15 namespace shared_model {
16  namespace interface {
17  namespace permissions {
18  enum class Role {
24  kAddPeer,
27  kSetQuorum,
29  kSetDetail,
31  kTransfer,
32  kReceive,
35  kGetRoles,
54  kGetMyTxs,
55  kGetAllTxs,
61  kGetBlocks,
64  kGetPeers,
66  kRoot,
72 
73  COUNT
74  };
75 
76  enum class Grantable {
83 
84  COUNT
85  };
86 
88 
93  bool isValid(interface::permissions::Role perm) noexcept;
94 
99  bool isValid(interface::permissions::Grantable perm) noexcept;
100  } // namespace permissions
101 
102  template <typename Perm>
104  public:
105  PermissionSet();
106  PermissionSet(std::initializer_list<Perm> list);
107  explicit PermissionSet(std::string_view bitstring);
108 
109  // TODO [IR-1889] Akvinikym 21.11.18: introduce toString() method
110  std::string toBitstring() const;
111 
112  static constexpr size_t size() {
113  return static_cast<size_t>(Perm::COUNT);
114  }
115 
116  PermissionSet &unsetAll();
117  PermissionSet &setAll();
118  PermissionSet &set(Perm p);
119  PermissionSet &unset(Perm p);
120 
121  bool isSet(Perm p) const;
122  bool isEmpty() const;
123 
125  bool isSubsetOf(const PermissionSet<Perm> &r) const;
126 
127  bool operator==(const PermissionSet<Perm> &r) const;
128  bool operator!=(const PermissionSet<Perm> &r) const;
129  PermissionSet<Perm> &operator&=(const PermissionSet<Perm> &r);
130  PermissionSet<Perm> &operator|=(const PermissionSet<Perm> &r);
131  PermissionSet<Perm> &operator^=(const PermissionSet<Perm> &r);
132 
133  void iterate(std::function<void(Perm)> f) const;
134 
135  private:
136  std::bitset<static_cast<size_t>(Perm::COUNT)> perms_bitset_;
137  };
138 
141  } // namespace interface
142 } // namespace shared_model
143 
144 #endif // IROHA_SHARED_MODEL_TRANSACTION_HPP
Grantable
Definition: permissions.hpp:76
Definition: permissions.hpp:103
static constexpr size_t size()
Definition: permissions.hpp:112
Role
Definition: permissions.hpp:18
Role permissionFor(Grantable g)
Definition: permissions.cpp:14
Definition: command_executor.hpp:13
bool isValid(Role perm) noexcept
Definition: permissions.cpp:33