Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <unordered_map>
- #include <unordered_set>
- class AccessControl {
- private:
- std::unordered_map<int, std::unordered_set<std::string>> userRoles;
- std::unordered_set<std::string> registeredRoles;
- public:
- bool HasRole(int id, const std::string& roleName) const {
- auto userIt = userRoles.find(id);
- if (userIt != userRoles.end()) {
- return userIt->second.find(roleName) != userIt->second.end();
- }
- return false;
- }
- bool GrantRole(int id, const std::string& roleName) {
- if (registeredRoles.find(roleName) == registeredRoles.end()) {
- return false;
- }
- return userRoles[id].insert(roleName).second;
- }
- bool RemoveRole(int id, const std::string& roleName) {
- auto userIt = userRoles.find(id);
- if (userIt != userRoles.end() && userIt->second.find(roleName) != userIt->second.end()) {
- userIt->second.erase(roleName);
- return true;
- }
- return false;
- }
- void RegisterRole(const std::string& roleName) {
- registeredRoles.insert(roleName);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement