mirror of
https://github.com/anope/anope.git
synced 2026-06-26 00:06:40 +02:00
Fixed access comparators
This commit is contained in:
+5
-5
@@ -55,14 +55,14 @@ class CoreExport ChanAccess : public Serializable
|
||||
static void unserialize(serialized_data &);
|
||||
|
||||
virtual bool Matches(User *u, NickCore *nc) = 0;
|
||||
virtual bool HasPriv(const Anope::string &name) = 0;
|
||||
virtual bool HasPriv(const Anope::string &name) const = 0;
|
||||
virtual Anope::string Serialize() = 0;
|
||||
virtual void Unserialize(const Anope::string &data) = 0;
|
||||
|
||||
bool operator>(ChanAccess &other);
|
||||
bool operator<(ChanAccess &other);
|
||||
bool operator>=(ChanAccess &other);
|
||||
bool operator<=(ChanAccess &other);
|
||||
bool operator>(const ChanAccess &other) const;
|
||||
bool operator<(const ChanAccess &other) const;
|
||||
bool operator>=(const ChanAccess &other) const;
|
||||
bool operator<=(const ChanAccess &other) const;
|
||||
};
|
||||
|
||||
class CoreExport AccessGroup : public std::vector<ChanAccess *>
|
||||
|
||||
@@ -40,7 +40,7 @@ class AccessChanAccess : public ChanAccess
|
||||
return false;
|
||||
}
|
||||
|
||||
bool HasPriv(const Anope::string &name)
|
||||
bool HasPriv(const Anope::string &name) const
|
||||
{
|
||||
return this->ci->GetLevel(name) != ACCESS_INVALID && this->level >= this->ci->GetLevel(name);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ class FlagsChanAccess : public ChanAccess
|
||||
return false;
|
||||
}
|
||||
|
||||
bool HasPriv(const Anope::string &priv)
|
||||
bool HasPriv(const Anope::string &priv) const
|
||||
{
|
||||
std::map<Anope::string, char>::iterator it = defaultFlags.find(priv);
|
||||
if (it != defaultFlags.end() && this->flags.count(it->second) > 0)
|
||||
|
||||
@@ -108,7 +108,7 @@ class XOPChanAccess : public ChanAccess
|
||||
return false;
|
||||
}
|
||||
|
||||
bool HasPriv(const Anope::string &priv)
|
||||
bool HasPriv(const Anope::string &priv) const
|
||||
{
|
||||
for (int i = 0; xopAccess[i].type != XOP_UNKNOWN; ++i)
|
||||
{
|
||||
|
||||
+85
-29
@@ -112,25 +112,7 @@ void ChanAccess::unserialize(serialized_data &data)
|
||||
ci->AddAccess(access);
|
||||
}
|
||||
|
||||
bool ChanAccess::operator>(ChanAccess &other)
|
||||
{
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
if (this->HasPriv(privs[i - 1].name) && !other.HasPriv(privs[i - 1].name))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ChanAccess::operator<(ChanAccess &other)
|
||||
{
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
if (!this->HasPriv(privs[i - 1].name) && other.HasPriv(privs[i - 1].name))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ChanAccess::operator>=(ChanAccess &other)
|
||||
bool ChanAccess::operator>(const ChanAccess &other) const
|
||||
{
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
@@ -138,14 +120,18 @@ bool ChanAccess::operator>=(ChanAccess &other)
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if ((this_p && !other_p) || (this_p && other_p))
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (this_p && !other_p)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ChanAccess::operator<=(ChanAccess &other)
|
||||
bool ChanAccess::operator<(const ChanAccess &other) const
|
||||
{
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
@@ -153,11 +139,53 @@ bool ChanAccess::operator<=(ChanAccess &other)
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if ((!this_p && other_p) || (this_p && other_p))
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (!this_p && other_p)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ChanAccess::operator>=(const ChanAccess &other) const
|
||||
{
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
{
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (!this_p && other_p)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChanAccess::operator<=(const ChanAccess &other) const
|
||||
{
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
{
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (this_p && !other_p)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
AccessGroup::AccessGroup() : std::vector<ChanAccess *>()
|
||||
@@ -211,8 +239,18 @@ bool AccessGroup::operator>(const AccessGroup &other) const
|
||||
return false;
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
if (this->HasPriv(privs[i - 1].name) && !other.HasPriv(privs[i - 1].name))
|
||||
{
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (this_p && !other_p)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -228,8 +266,18 @@ bool AccessGroup::operator<(const AccessGroup &other) const
|
||||
return false;
|
||||
const std::vector<Privilege> &privs = PrivilegeManager::GetPrivileges();
|
||||
for (unsigned i = privs.size(); i > 0; --i)
|
||||
if (!this->HasPriv(privs[i - 1].name) && other.HasPriv(privs[i - 1].name))
|
||||
{
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (!this_p && other_p)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -249,11 +297,15 @@ bool AccessGroup::operator>=(const AccessGroup &other) const
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if ((this_p && !other_p) || (this_p && other_p))
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (other_p && !this_p)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AccessGroup::operator<=(const AccessGroup &other) const
|
||||
@@ -272,10 +324,14 @@ bool AccessGroup::operator<=(const AccessGroup &other) const
|
||||
bool this_p = this->HasPriv(privs[i - 1].name),
|
||||
other_p = other.HasPriv(privs[i - 1].name);
|
||||
|
||||
if ((!this_p && other_p) || (this_p && other_p))
|
||||
if (!this_p && !other_p)
|
||||
continue;
|
||||
else if (this_p && !other_p)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user