diff options
Diffstat (limited to 'src/mongo/db/auth/client_auth_session.cpp')
-rw-r--r-- | src/mongo/db/auth/client_auth_session.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/mongo/db/auth/client_auth_session.cpp b/src/mongo/db/auth/client_auth_session.cpp index e2cb57522cb..46a38c64ac1 100644 --- a/src/mongo/db/auth/client_auth_session.cpp +++ b/src/mongo/db/auth/client_auth_session.cpp @@ -32,8 +32,11 @@ #include <utility> #include "mongo/db/auth/authentication_session.h" +#include "mongo/db/auth/authorization_manager.h" #include "mongo/db/auth/authorization_session.h" #include "mongo/db/client_basic.h" +#include "mongo/db/service_context.h" +#include "mongo/util/assert_util.h" namespace mongo { namespace { @@ -41,6 +44,9 @@ namespace { const auto getAuthenticationSession = ClientBasic::declareDecoration<std::unique_ptr<AuthenticationSession>>(); + const auto getAuthorizationManager = + ServiceContext::declareDecoration<std::unique_ptr<AuthorizationManager>>(); + const auto getAuthorizationSession = ClientBasic::declareDecoration<std::unique_ptr<AuthorizationSession>>(); @@ -59,6 +65,22 @@ namespace { swap(getAuthenticationSession(client), other); } + AuthorizationManager* AuthorizationManager::get(ServiceContext* service) { + return getAuthorizationManager(service).get(); + } + + AuthorizationManager* AuthorizationManager::get(ServiceContext& service) { + return getAuthorizationManager(service).get(); + } + + void AuthorizationManager::set(ServiceContext* service, + std::unique_ptr<AuthorizationManager> authzManager) { + auto& manager = getAuthorizationManager(service); + invariant(authzManager); + invariant(!manager); + manager = std::move(authzManager); + } + AuthorizationSession* AuthorizationSession::get(ClientBasic* client) { return get(*client); } @@ -78,7 +100,10 @@ namespace { void AuthorizationSession::set( ClientBasic* client, std::unique_ptr<AuthorizationSession> authorizationSession) { - getAuthorizationSession(client) = std::move(authorizationSession); + auto& authzSession = getAuthorizationSession(client); + invariant(authorizationSession); + invariant(!authzSession); + authzSession = std::move(authorizationSession); } } // namespace mongo |