diff options
Diffstat (limited to 'src/mongo/db/auth/user_set.h')
-rw-r--r-- | src/mongo/db/auth/user_set.h | 161 |
1 files changed, 85 insertions, 76 deletions
diff --git a/src/mongo/db/auth/user_set.h b/src/mongo/db/auth/user_set.h index 8d2bc630d2e..9ad0ab03202 100644 --- a/src/mongo/db/auth/user_set.h +++ b/src/mongo/db/auth/user_set.h @@ -39,81 +39,90 @@ namespace mongo { +/** + * A collection of authenticated users. + * This class does not do any locking/synchronization, the consumer will be responsible for + * synchronizing access. + */ +class UserSet { + MONGO_DISALLOW_COPYING(UserSet); + +public: + typedef std::vector<User*>::const_iterator iterator; + + 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 + * new user's database, returns NULL. + * + * Invalidates any outstanding iterators or NameIterators. + */ + 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. + */ + 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. + */ + User* removeAt(iterator it); + /** - * A collection of authenticated users. - * This class does not do any locking/synchronization, the consumer will be responsible for - * synchronizing access. + * 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; */ - class UserSet { - MONGO_DISALLOW_COPYING(UserSet); - public: - typedef std::vector<User*>::const_iterator iterator; - - 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 - * new user's database, returns NULL. - * - * Invalidates any outstanding iterators or NameIterators. - */ - 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. - */ - 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. - */ - 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; - */ - 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. - 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. - 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() const { return _users.begin(); } - 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. - std::vector<User*> _users; - std::vector<User*>::iterator _usersEnd; - }; - -} // namespace mongo + 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. + 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. + 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() const { + return _users.begin(); + } + 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. + std::vector<User*> _users; + std::vector<User*>::iterator _usersEnd; +}; + +} // namespace mongo |