summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-07-03 22:45:00 -0400
committerAdam <Adam@anope.org>2013-07-03 22:45:00 -0400
commit7f971043bc0b552e0ec2f3a88bf123cecb007387 (patch)
tree2cc22c4b2c2d0231567624ad5d7595fbb97662ed /include
parentc2e1a8a3e2bc2144ad0c4c6009be3ea974aef58f (diff)
Allow channels on access lists
Diffstat (limited to 'include')
-rw-r--r--include/access.h14
-rw-r--r--include/modules.h6
-rw-r--r--include/regchannel.h9
3 files changed, 22 insertions, 7 deletions
diff --git a/include/access.h b/include/access.h
index f60625ad9..19b6b3b02 100644
--- a/include/access.h
+++ b/include/access.h
@@ -75,6 +75,13 @@ class CoreExport AccessProvider : public Service
class CoreExport ChanAccess : public Serializable
{
public:
+ typedef std::multimap<const ChanAccess *, const ChanAccess *> Set;
+ /* shows the 'path' taken to determine if an access entry matches a user
+ * .first are access entries checked
+ * .second are access entries which match
+ */
+ typedef std::pair<Set, Set> Path;
+
/* The provider that created this access entry */
AccessProvider *provider;
/* Channel this access entry is on */
@@ -95,8 +102,9 @@ class CoreExport ChanAccess : public Serializable
/** Check if this access entry matches the given user or account
* @param u The user
* @param nc The account
+ * @param p The path to the access object which matches will be put here
*/
- virtual bool Matches(const User *u, const NickCore *nc) const;
+ virtual bool Matches(const User *u, const NickCore *nc, Path &p) const;
/** Check if this access entry has the given privilege.
* @param name The privilege name
@@ -127,8 +135,10 @@ class CoreExport ChanAccess : public Serializable
class CoreExport AccessGroup : public std::vector<ChanAccess *>
{
public:
- /* Channel these access entries are on */
+ /* Channel these access entries are on */
const ChannelInfo *ci;
+ /* Path from these entries to other entries that they depend on */
+ ChanAccess::Path path;
/* Account these entries affect, if any */
const NickCore *nc;
/* super_admin always gets all privs. founder is a special case where ci->founder == nc */
diff --git a/include/modules.h b/include/modules.h
index ffb8bbcc7..8948d3389 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -597,10 +597,10 @@ class CoreExport Module : public Extensible
*/
virtual void OnBotDelete(BotInfo *bi) { throw NotImplementedException(); }
- /** Called when access is deleted from a channel
+ /** Called after an access entry is deleted from a channel
* @param ci The channel
* @param source The source of the command
- * @param access The access entry being removed
+ * @param access The access entry that was removed
*/
virtual void OnAccessDel(ChannelInfo *ci, CommandSource &source, ChanAccess *access) { throw NotImplementedException(); }
@@ -704,7 +704,7 @@ class CoreExport Module : public Extensible
* @param priv The privilege being checked for
* @return EVENT_ALLOW for yes, EVENT_STOP to stop all processing
*/
- virtual EventReturn OnCheckPriv(ChanAccess *access, const Anope::string &priv) { throw NotImplementedException(); }
+ virtual EventReturn OnCheckPriv(const ChanAccess *access, const Anope::string &priv) { throw NotImplementedException(); }
/** Check whether an access group has a privilege
* @param group The group
diff --git a/include/regchannel.h b/include/regchannel.h
index f04156d89..49fc882e2 100644
--- a/include/regchannel.h
+++ b/include/regchannel.h
@@ -137,13 +137,18 @@ class CoreExport ChannelInfo : public Serializable, public Extensible
*/
unsigned GetAccessCount() const;
+ /** Get the number of access entries for this channel,
+ * including those that are on other channels.
+ */
+ unsigned GetDeepAccessCount() const;
+
/** Erase an entry from the channel access list
*
* @param index The index in the access list vector
*
- * Clears the memory used by the given access entry and removes it from the vector.
+ * @return The erased entry
*/
- void EraseAccess(unsigned index);
+ ChanAccess *EraseAccess(unsigned index);
/** Clear the entire channel access list
*