diff options
Diffstat (limited to 'src/mongo/db/auth/user_set.h')
-rw-r--r-- | src/mongo/db/auth/user_set.h | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/mongo/db/auth/user_set.h b/src/mongo/db/auth/user_set.h index 3b1472c6c8f..9ad0ab03202 100644 --- a/src/mongo/db/auth/user_set.h +++ b/src/mongo/db/auth/user_set.h @@ -35,7 +35,7 @@ #include "mongo/db/auth/authorization_manager.h" #include "mongo/db/auth/user.h" #include "mongo/db/auth/user_name.h" -#include "mongo/stdx/list.h" + namespace mongo { @@ -48,14 +48,16 @@ class UserSet { MONGO_DISALLOW_COPYING(UserSet); public: - using iterator = stdx::list<UserHandle>::iterator; - using const_iterator = stdx::list<UserHandle>::const_iterator; + typedef std::vector<User*>::const_iterator iterator; - UserSet() = default; + UserSet(); + ~UserSet(); /** * Adds a User to the UserSet. * + * The UserSet does not take ownership of the User. + * * As there can only be one user per database in the UserSet, if a User already exists for * the new User's database, the old user will be removed from the set and returned. It is * the caller's responsibility to then release that user. If no user already exists for the @@ -63,54 +65,64 @@ public: * * Invalidates any outstanding iterators or NameIterators. */ - void add(UserHandle user); + User* add(User* user); /** * Replaces the user at "it" with "replacement." Does not take ownership of the User. * Returns a pointer to the old user referenced by "it". Does _not_ invalidate "iterator" * instances. */ - void replaceAt(iterator it, UserHandle replacement); + User* replaceAt(iterator it, User* replacement); /** * Removes the user at "it", and returns a pointer to it. After this call, "it" remains * valid. It will either equal "end()", or refer to some user between the values of "it" * and "end()" before this call was made. */ - void removeAt(iterator it); + User* removeAt(iterator it); /** * Removes the User whose authentication credentials came from dbname, and returns that * user. It is the caller's responsibility to then release that user back to the * authorizationManger. If no user exists for the given database, returns NULL; */ - void removeByDBName(StringData dbname); + User* removeByDBName(StringData dbname); // Returns the User with the given name, or NULL if not found. // Ownership of the returned User remains with the UserSet. The pointer // returned is only guaranteed to remain valid until the next non-const method is called // on the UserSet. - UserHandle lookup(const UserName& name) const; + User* lookup(const UserName& name) const; // Gets the user whose authentication credentials came from dbname, or NULL if none // exist. There should be at most one such user. - UserHandle lookupByDBName(StringData dbname) const; + User* lookupByDBName(StringData dbname) const; // Gets an iterator over the names of the users stored in the set. The iterator is // valid until the next non-const method is called on the UserSet. UserNameIterator getNames() const; - iterator begin() { + iterator begin() const { return _users.begin(); } - iterator end() { - return _users.end(); + iterator end() const { + return _usersEnd; } private: + typedef std::vector<User*>::iterator mutable_iterator; + + mutable_iterator mbegin() { + return _users.begin(); + } + mutable_iterator mend() { + return _usersEnd; + } + // The UserSet maintains ownership of the Users in it, and is responsible for // returning them to the AuthorizationManager when done with them. - stdx::list<UserHandle> _users; + std::vector<User*> _users; + std::vector<User*>::iterator _usersEnd; }; } // namespace mongo |