summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/lite_parsed_document_source.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/lite_parsed_document_source.h')
-rw-r--r--src/mongo/db/pipeline/lite_parsed_document_source.h33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/mongo/db/pipeline/lite_parsed_document_source.h b/src/mongo/db/pipeline/lite_parsed_document_source.h
index dae9ee222ce..489e8bc1aa7 100644
--- a/src/mongo/db/pipeline/lite_parsed_document_source.h
+++ b/src/mongo/db/pipeline/lite_parsed_document_source.h
@@ -32,6 +32,7 @@
#include <memory>
#include <vector>
+#include "mongo/db/auth/privilege.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/pipeline/aggregation_request.h"
#include "mongo/stdx/functional.h"
@@ -85,6 +86,11 @@ public:
virtual stdx::unordered_set<NamespaceString> getInvolvedNamespaces() const = 0;
/**
+ * Returns a list of the privileges required for this stage.
+ */
+ virtual PrivilegeVector requiredPrivileges(bool isMongos) const = 0;
+
+ /**
* Returns true if this is a $collStats stage.
*/
virtual bool isCollStats() const {
@@ -97,6 +103,13 @@ public:
virtual bool isChangeNotification() const {
return false;
}
+
+ /**
+ * Returns true if this stage does not require an input source.
+ */
+ virtual bool isInitialSource() const {
+ return false;
+ }
};
class LiteParsedDocumentSourceDefault final : public LiteParsedDocumentSource {
@@ -116,6 +129,10 @@ public:
stdx::unordered_set<NamespaceString> getInvolvedNamespaces() const final {
return stdx::unordered_set<NamespaceString>();
}
+
+ PrivilegeVector requiredPrivileges(bool isMongos) const final {
+ return {};
+ }
};
/**
@@ -123,18 +140,24 @@ public:
*/
class LiteParsedDocumentSourceForeignCollections : public LiteParsedDocumentSource {
public:
- explicit LiteParsedDocumentSourceForeignCollections(NamespaceString foreignNss)
- : _foreignNssSet{std::move(foreignNss)} {}
+ LiteParsedDocumentSourceForeignCollections(NamespaceString foreignNss,
+ PrivilegeVector privileges)
+ : _foreignNssSet{std::move(foreignNss)}, _requiredPrivileges(std::move(privileges)) {}
- explicit LiteParsedDocumentSourceForeignCollections(
- stdx::unordered_set<NamespaceString> foreignNssSet)
- : _foreignNssSet(std::move(foreignNssSet)) {}
+ LiteParsedDocumentSourceForeignCollections(stdx::unordered_set<NamespaceString> foreignNssSet,
+ PrivilegeVector privileges)
+ : _foreignNssSet(std::move(foreignNssSet)), _requiredPrivileges(std::move(privileges)) {}
stdx::unordered_set<NamespaceString> getInvolvedNamespaces() const final {
return {_foreignNssSet};
}
+ PrivilegeVector requiredPrivileges(bool isMongos) const final {
+ return _requiredPrivileges;
+ }
+
private:
stdx::unordered_set<NamespaceString> _foreignNssSet;
+ PrivilegeVector _requiredPrivileges;
};
} // namespace mongo