diff options
author | Adam <Adam@anope.org> | 2011-12-15 02:29:13 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-12-15 02:29:13 -0500 |
commit | c88a751eab55b5524395796734beb5bb15811d61 (patch) | |
tree | 7ff0f6d31c260c01374a373b897031736a085601 /src/access.cpp | |
parent | 9ea030d0600624095204af192e99c16e2d78a42e (diff) |
Add privilege ranks to determine how powerful privileges are
Diffstat (limited to 'src/access.cpp')
-rw-r--r-- | src/access.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/access.cpp b/src/access.cpp index 622150d16..26622e6d6 100644 --- a/src/access.cpp +++ b/src/access.cpp @@ -12,22 +12,29 @@ #include "services.h" #include "modules.h" -Privilege::Privilege(const Anope::string &n, const Anope::string &d) : name(n), desc(d) +Privilege::Privilege(const Anope::string &n, const Anope::string &d, int r) : name(n), desc(d), rank(r) { } -bool Privilege::operator==(const Privilege &other) +bool Privilege::operator==(const Privilege &other) const { return this->name == other.name; } std::vector<Privilege> PrivilegeManager::privs; -void PrivilegeManager::AddPrivilege(Privilege p, int pos, int def) +void PrivilegeManager::AddPrivilege(Privilege p) { - if (pos < 0 || static_cast<size_t>(pos) > privs.size()) - pos = privs.size(); - privs.insert(privs.begin() + pos, p); + unsigned i; + for (i = 0; i < privs.size(); ++i) + { + Privilege &priv = privs[i]; + + if (priv.rank > p.rank) + break; + } + + privs.insert(privs.begin() + i, p); } void PrivilegeManager::RemovePrivilege(Privilege &p) @@ -35,6 +42,7 @@ void PrivilegeManager::RemovePrivilege(Privilege &p) std::vector<Privilege>::iterator it = std::find(privs.begin(), privs.end(), p); if (it != privs.end()) privs.erase(it); + for (registered_channel_map::const_iterator cit = RegisteredChannelList.begin(), cit_end = RegisteredChannelList.end(); cit != cit_end; ++cit) cit->second->RemoveLevel(p.name); } |