summaryrefslogtreecommitdiff
path: root/src/mongo/db/auth/client_auth_session.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/auth/client_auth_session.cpp')
-rw-r--r--src/mongo/db/auth/client_auth_session.cpp27
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