From aa02745915c4863cce79b055c2eb81d7d743f723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Boris=20Ta=C5=A1evski?= <36607228+BorisTasevski@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:37:17 +0200 Subject: [PATCH] [E129-MG < T1030-MG] Tech debts (#540) * renamed parameters (#539) * added variable declarations in ifs; minor code improvements; (#541) * dba parameter removed (#543) * Accept -> Has rename; HasGlobalPermissionOnVertices/Edges -> HasGlobalPrivilegeOnVertices/Edges (#545) * replaced passing dba from reference to pointer --- src/glue/auth_checker.cpp | 58 +++---- src/glue/auth_checker.hpp | 26 +-- src/query/auth_checker.hpp | 48 +++--- src/query/interpreter.cpp | 4 +- src/query/plan/operator.cpp | 110 ++++++------- src/query/procedure/mg_procedure_impl.cpp | 99 ++++++----- tests/unit/auth_checker.cpp | 154 +++++++++--------- tests/unit/bfs_common.hpp | 2 +- .../query_plan_create_set_remove_delete.cpp | 28 ++-- tests/unit/query_plan_match_filter_return.cpp | 10 +- tests/unit/query_trigger.cpp | 5 +- 11 files changed, 260 insertions(+), 284 deletions(-) diff --git a/src/glue/auth_checker.cpp b/src/glue/auth_checker.cpp index cd66f6146..08e7fbbf1 100644 --- a/src/glue/auth_checker.cpp +++ b/src/glue/auth_checker.cpp @@ -18,13 +18,13 @@ #include "utils/synchronized.hpp" namespace { -bool IsUserAuthorizedLabels(const memgraph::auth::User &user, const memgraph::query::DbAccessor &dba, +bool IsUserAuthorizedLabels(const memgraph::auth::User &user, const memgraph::query::DbAccessor *dba, const std::vector<memgraph::storage::LabelId> &labels, - const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_permission) { - return std::all_of(labels.begin(), labels.end(), [&dba, &user, fine_grained_permission](const auto &label) { + const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) { + return std::all_of(labels.begin(), labels.end(), [dba, &user, fine_grained_privilege](const auto &label) { return user.GetFineGrainedAccessLabelPermissions().Has( - dba.LabelToName(label), memgraph::glue::FineGrainedPrivilegeToFineGrainedPermission( - fine_grained_permission)) == memgraph::auth::PermissionLevel::GRANT; + dba->LabelToName(label), memgraph::glue::FineGrainedPrivilegeToFineGrainedPermission( + fine_grained_privilege)) == memgraph::auth::PermissionLevel::GRANT; }); } @@ -40,12 +40,12 @@ bool IsUserAuthorizedGloballyEdges(const memgraph::auth::User &user, memgraph::auth::PermissionLevel::GRANT; } -bool IsUserAuthorizedEdgeType(const memgraph::auth::User &user, const memgraph::query::DbAccessor &dba, +bool IsUserAuthorizedEdgeType(const memgraph::auth::User &user, const memgraph::query::DbAccessor *dba, const memgraph::storage::EdgeTypeId &edgeType, - const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_permission) { + const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) { return user.GetFineGrainedAccessEdgeTypePermissions().Has( - dba.EdgeTypeToName(edgeType), memgraph::glue::FineGrainedPrivilegeToFineGrainedPermission( - fine_grained_permission)) == memgraph::auth::PermissionLevel::GRANT; + dba->EdgeTypeToName(edgeType), memgraph::glue::FineGrainedPrivilegeToFineGrainedPermission( + fine_grained_privilege)) == memgraph::auth::PermissionLevel::GRANT; } } // namespace @@ -72,7 +72,7 @@ bool AuthChecker::IsUserAuthorized(const std::optional<std::string> &username, } std::unique_ptr<memgraph::query::FineGrainedAuthChecker> AuthChecker::GetFineGrainedAuthChecker( - const std::string &username) const { + const std::string &username, const memgraph::query::DbAccessor *dba) const { try { auto locked_auth = auth_->Lock(); auto user = locked_auth->GetUser(username); @@ -80,7 +80,7 @@ std::unique_ptr<memgraph::query::FineGrainedAuthChecker> AuthChecker::GetFineGra throw memgraph::query::QueryRuntimeException("User '{}' doesn't exist .", username); } - return std::make_unique<memgraph::glue::FineGrainedAuthChecker>(std::move(*user)); + return std::make_unique<memgraph::glue::FineGrainedAuthChecker>(std::move(*user), dba); } catch (const memgraph::auth::AuthException &e) { throw memgraph::query::QueryRuntimeException(e.what()); @@ -96,12 +96,11 @@ bool AuthChecker::IsUserAuthorized(const memgraph::auth::User &user, }); } -FineGrainedAuthChecker::FineGrainedAuthChecker(auth::User user) : user_{std::move(user)} {}; +FineGrainedAuthChecker::FineGrainedAuthChecker(auth::User user, const memgraph::query::DbAccessor *dba) + : user_{std::move(user)}, dba_(dba){}; -bool FineGrainedAuthChecker::Accept( - const memgraph::query::DbAccessor &dba, const memgraph::query::VertexAccessor &vertex, - const memgraph::storage::View view, - const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const { +bool FineGrainedAuthChecker::Has(const memgraph::query::VertexAccessor &vertex, const memgraph::storage::View view, + const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const { auto maybe_labels = vertex.Labels(view); if (maybe_labels.HasError()) { switch (maybe_labels.GetError()) { @@ -116,33 +115,30 @@ bool FineGrainedAuthChecker::Accept( } } - return IsUserAuthorizedLabels(user_, dba, *maybe_labels, fine_grained_permission); + return IsUserAuthorizedLabels(user_, dba_, *maybe_labels, fine_grained_privilege); } -bool FineGrainedAuthChecker::Accept( - const memgraph::query::DbAccessor &dba, const memgraph::query::EdgeAccessor &edge, - const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const { - return IsUserAuthorizedEdgeType(user_, dba, edge.EdgeType(), fine_grained_permission); +bool FineGrainedAuthChecker::Has(const memgraph::query::EdgeAccessor &edge, + const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const { + return IsUserAuthorizedEdgeType(user_, dba_, edge.EdgeType(), fine_grained_privilege); } -bool FineGrainedAuthChecker::Accept( - const memgraph::query::DbAccessor &dba, const std::vector<memgraph::storage::LabelId> &labels, - const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const { - return IsUserAuthorizedLabels(user_, dba, labels, fine_grained_permission); +bool FineGrainedAuthChecker::Has(const std::vector<memgraph::storage::LabelId> &labels, + const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const { + return IsUserAuthorizedLabels(user_, dba_, labels, fine_grained_privilege); } -bool FineGrainedAuthChecker::Accept( - const memgraph::query::DbAccessor &dba, const memgraph::storage::EdgeTypeId &edge_type, - const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const { - return IsUserAuthorizedEdgeType(user_, dba, edge_type, fine_grained_permission); +bool FineGrainedAuthChecker::Has(const memgraph::storage::EdgeTypeId &edge_type, + const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const { + return IsUserAuthorizedEdgeType(user_, dba_, edge_type, fine_grained_privilege); } -bool FineGrainedAuthChecker::HasGlobalPermissionOnVertices( +bool FineGrainedAuthChecker::HasGlobalPrivilegeOnVertices( const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const { return IsUserAuthorizedGloballyLabels(user_, FineGrainedPrivilegeToFineGrainedPermission(fine_grained_privilege)); } -bool FineGrainedAuthChecker::HasGlobalPermissionOnEdges( +bool FineGrainedAuthChecker::HasGlobalPrivilegeOnEdges( const memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const { return IsUserAuthorizedGloballyEdges(user_, FineGrainedPrivilegeToFineGrainedPermission(fine_grained_privilege)); }; diff --git a/src/glue/auth_checker.hpp b/src/glue/auth_checker.hpp index f80d0f441..56ffe4510 100644 --- a/src/glue/auth_checker.hpp +++ b/src/glue/auth_checker.hpp @@ -28,7 +28,7 @@ class AuthChecker : public query::AuthChecker { const std::vector<query::AuthQuery::Privilege> &privileges) const override; std::unique_ptr<memgraph::query::FineGrainedAuthChecker> GetFineGrainedAuthChecker( - const std::string &username) const override; + const std::string &username, const memgraph::query::DbAccessor *dba) const override; [[nodiscard]] static bool IsUserAuthorized(const memgraph::auth::User &user, const std::vector<memgraph::query::AuthQuery::Privilege> &privileges); @@ -39,28 +39,28 @@ class AuthChecker : public query::AuthChecker { class FineGrainedAuthChecker : public query::FineGrainedAuthChecker { public: - explicit FineGrainedAuthChecker(auth::User user); + explicit FineGrainedAuthChecker(auth::User user, const memgraph::query::DbAccessor *dba); - bool Accept(const memgraph::query::DbAccessor &dba, const query::VertexAccessor &vertex, memgraph::storage::View view, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override; + bool Has(const query::VertexAccessor &vertex, memgraph::storage::View view, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const override; - bool Accept(const memgraph::query::DbAccessor &dba, const query::EdgeAccessor &edge, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override; + bool Has(const query::EdgeAccessor &edge, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const override; - bool Accept(const memgraph::query::DbAccessor &dba, const std::vector<memgraph::storage::LabelId> &labels, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override; + bool Has(const std::vector<memgraph::storage::LabelId> &labels, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const override; - bool Accept(const memgraph::query::DbAccessor &dba, const memgraph::storage::EdgeTypeId &edge_type, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override; + bool Has(const memgraph::storage::EdgeTypeId &edge_type, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const override; - bool HasGlobalPermissionOnVertices( + bool HasGlobalPrivilegeOnVertices( memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const override; - bool HasGlobalPermissionOnEdges( + bool HasGlobalPrivilegeOnEdges( memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const override; private: auth::User user_; + const memgraph::query::DbAccessor *dba_; }; - } // namespace memgraph::glue diff --git a/src/query/auth_checker.hpp b/src/query/auth_checker.hpp index 703406569..a76692a12 100644 --- a/src/query/auth_checker.hpp +++ b/src/query/auth_checker.hpp @@ -27,63 +27,60 @@ class AuthChecker { const std::vector<query::AuthQuery::Privilege> &privileges) const = 0; [[nodiscard]] virtual std::unique_ptr<FineGrainedAuthChecker> GetFineGrainedAuthChecker( - const std::string &username) const = 0; + const std::string &username, const memgraph::query::DbAccessor *db_accessor) const = 0; }; class FineGrainedAuthChecker { public: virtual ~FineGrainedAuthChecker() = default; - [[nodiscard]] virtual bool Accept(const memgraph::query::DbAccessor &dba, const query::VertexAccessor &vertex, - memgraph::storage::View view, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const = 0; + [[nodiscard]] virtual bool Has(const query::VertexAccessor &vertex, memgraph::storage::View view, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const = 0; - [[nodiscard]] virtual bool Accept(const memgraph::query::DbAccessor &dba, const query::EdgeAccessor &edge, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const = 0; + [[nodiscard]] virtual bool Has(const query::EdgeAccessor &edge, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const = 0; - [[nodiscard]] virtual bool Accept(const memgraph::query::DbAccessor &dba, - const std::vector<memgraph::storage::LabelId> &labels, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const = 0; + [[nodiscard]] virtual bool Has(const std::vector<memgraph::storage::LabelId> &labels, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const = 0; - [[nodiscard]] virtual bool Accept(const memgraph::query::DbAccessor &dba, - const memgraph::storage::EdgeTypeId &edge_type, - query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const = 0; + [[nodiscard]] virtual bool Has(const memgraph::storage::EdgeTypeId &edge_type, + query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const = 0; - [[nodiscard]] virtual bool HasGlobalPermissionOnVertices( + [[nodiscard]] virtual bool HasGlobalPrivilegeOnVertices( memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const = 0; - [[nodiscard]] virtual bool HasGlobalPermissionOnEdges( + [[nodiscard]] virtual bool HasGlobalPrivilegeOnEdges( memgraph::query::AuthQuery::FineGrainedPrivilege fine_grained_privilege) const = 0; }; class AllowEverythingFineGrainedAuthChecker final : public query::FineGrainedAuthChecker { public: - bool Accept(const memgraph::query::DbAccessor &dba, const VertexAccessor &vertex, const memgraph::storage::View view, - const query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override { + bool Has(const VertexAccessor & /*vertex*/, const memgraph::storage::View /*view*/, + const query::AuthQuery::FineGrainedPrivilege /*fine_grained_privilege*/) const override { return true; } - bool Accept(const memgraph::query::DbAccessor &dba, const memgraph::query::EdgeAccessor &edge, - const query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override { + bool Has(const memgraph::query::EdgeAccessor & /*edge*/, + const query::AuthQuery::FineGrainedPrivilege /*fine_grained_privilege*/) const override { return true; } - bool Accept(const memgraph::query::DbAccessor &dba, const std::vector<memgraph::storage::LabelId> &labels, - const query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override { + bool Has(const std::vector<memgraph::storage::LabelId> & /*labels*/, + const query::AuthQuery::FineGrainedPrivilege /*fine_grained_privilege*/) const override { return true; } - bool Accept(const memgraph::query::DbAccessor &dba, const memgraph::storage::EdgeTypeId &edge_type, - const query::AuthQuery::FineGrainedPrivilege fine_grained_permission) const override { + bool Has(const memgraph::storage::EdgeTypeId & /*edge_type*/, + const query::AuthQuery::FineGrainedPrivilege /*fine_grained_privilege*/) const override { return true; } - bool HasGlobalPermissionOnVertices( + bool HasGlobalPrivilegeOnVertices( const memgraph::query::AuthQuery::FineGrainedPrivilege /*fine_grained_privilege*/) const override { return true; } - bool HasGlobalPermissionOnEdges( + bool HasGlobalPrivilegeOnEdges( const memgraph::query::AuthQuery::FineGrainedPrivilege /*fine_grained_privilege*/) const override { return true; } @@ -96,7 +93,8 @@ class AllowEverythingAuthChecker final : public query::AuthChecker { return true; } - std::unique_ptr<FineGrainedAuthChecker> GetFineGrainedAuthChecker(const std::string & /*username*/) const override { + std::unique_ptr<FineGrainedAuthChecker> GetFineGrainedAuthChecker(const std::string & /*username*/, + const query::DbAccessor * /*dba*/) const override { return std::make_unique<AllowEverythingFineGrainedAuthChecker>(); } }; diff --git a/src/query/interpreter.cpp b/src/query/interpreter.cpp index e0ae4f17b..f0aa35806 100644 --- a/src/query/interpreter.cpp +++ b/src/query/interpreter.cpp @@ -985,8 +985,8 @@ PullPlan::PullPlan(const std::shared_ptr<CachedPlan> plan, const Parameters &par ctx_.evaluation_context.properties = NamesToProperties(plan->ast_storage().properties_, dba); ctx_.evaluation_context.labels = NamesToLabels(plan->ast_storage().labels_, dba); #ifdef MG_ENTERPRISE - if (username.has_value()) { - ctx_.auth_checker = interpreter_context->auth_checker->GetFineGrainedAuthChecker(*username); + if (username.has_value() && dba) { + ctx_.auth_checker = interpreter_context->auth_checker->GetFineGrainedAuthChecker(*username, dba); } #endif if (interpreter_context->config.execution_timeout_sec > 0) { diff --git a/src/query/plan/operator.cpp b/src/query/plan/operator.cpp index ea87bc411..1b92cae51 100644 --- a/src/query/plan/operator.cpp +++ b/src/query/plan/operator.cpp @@ -241,8 +241,8 @@ bool CreateNode::CreateNodeCursor::Pull(Frame &frame, ExecutionContext &context) SCOPED_PROFILE_OP("CreateNode"); if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, self_.node_info_.labels, - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { + !context.auth_checker->Has(self_.node_info_.labels, + memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { throw QueryRuntimeException("Vertex not created due to not having enough permission!"); } @@ -334,9 +334,9 @@ bool CreateExpand::CreateExpandCursor::Pull(Frame &frame, ExecutionContext &cont ? memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE : memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE; if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, self_.edge_info_.edge_type, - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE) && - context.auth_checker->Accept(*context.db_accessor, self_.node_info_.labels, fine_grained_permission))) { + !(context.auth_checker->Has(self_.edge_info_.edge_type, + memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE) && + context.auth_checker->Has(self_.node_info_.labels, fine_grained_permission))) { throw QueryRuntimeException("Edge not created due to not having enough permission!"); } // get the origin vertex @@ -435,8 +435,8 @@ class ScanAllCursor : public Cursor { bool FindNextVertex(const ExecutionContext &context) { while (vertices_it_.value() != vertices_.value().end()) { - if (context.auth_checker->Accept(*context.db_accessor, *vertices_it_.value(), memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { + if (context.auth_checker->Has(*vertices_it_.value(), memgraph::storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { return true; } ++vertices_it_.value(); @@ -719,10 +719,9 @@ bool Expand::ExpandCursor::Pull(Frame &frame, ExecutionContext &context) { if (in_edges_ && *in_edges_it_ != in_edges_->end()) { auto edge = *(*in_edges_it_)++; if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge.From(), self_.view_, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge.From(), self_.view_, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { continue; } @@ -739,10 +738,9 @@ bool Expand::ExpandCursor::Pull(Frame &frame, ExecutionContext &context) { // already done in the block above if (self_.common_.direction == EdgeAtom::Direction::BOTH && edge.IsCycle()) continue; if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge.To(), self_.view_, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge.To(), self_.view_, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { continue; } @@ -1077,10 +1075,9 @@ class ExpandVariableCursor : public Cursor { current_edge.second == EdgeAtom::Direction::IN ? current_edge.first.From() : current_edge.first.To(); if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, current_edge.first, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, current_vertex, storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(current_edge.first, memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(current_vertex, storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { continue; } AppendEdge(current_edge.first, &edges_on_frame); @@ -1245,10 +1242,9 @@ class STShortestPathCursor : public query::plan::Cursor { auto out_edges = UnwrapEdgesResult(vertex.OutEdges(storage::View::OLD, self_.common_.edge_types)); for (const auto &edge : out_edges) { if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge.To(), storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge.To(), storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { continue; } @@ -1270,10 +1266,9 @@ class STShortestPathCursor : public query::plan::Cursor { auto in_edges = UnwrapEdgesResult(vertex.InEdges(storage::View::OLD, self_.common_.edge_types)); for (const auto &edge : in_edges) { if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge.From(), storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge.From(), storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { continue; } @@ -1309,10 +1304,9 @@ class STShortestPathCursor : public query::plan::Cursor { auto out_edges = UnwrapEdgesResult(vertex.OutEdges(storage::View::OLD, self_.common_.edge_types)); for (const auto &edge : out_edges) { if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge.To(), storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge.To(), storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { continue; } if (ShouldExpand(vertex, edge, frame, evaluator) && !Contains(out_edge, edge.To())) { @@ -1333,10 +1327,9 @@ class STShortestPathCursor : public query::plan::Cursor { auto in_edges = UnwrapEdgesResult(vertex.InEdges(storage::View::OLD, self_.common_.edge_types)); for (const auto &edge : in_edges) { if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge.From(), storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge.From(), storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { continue; } if (ShouldExpand(vertex, edge, frame, evaluator) && !Contains(out_edge, edge.From())) { @@ -1390,10 +1383,9 @@ class SingleSourceShortestPathCursor : public query::plan::Cursor { if (processed_.find(vertex) != processed_.end()) return; if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, vertex, storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(vertex, storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { return; } frame[self_.filter_lambda_.inner_edge_symbol] = edge; @@ -1576,10 +1568,9 @@ class ExpandWeightedShortestPathCursor : public query::plan::Cursor { auto *memory = evaluator.GetMemoryResource(); if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, vertex, storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && - context.auth_checker->Accept(*context.db_accessor, edge, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { + !(context.auth_checker->Has(vertex, storage::View::OLD, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ) && + context.auth_checker->Has(edge, memgraph::query::AuthQuery::FineGrainedPrivilege::READ))) { return; } if (self_.filter_lambda_.expression) { @@ -2333,12 +2324,9 @@ bool Delete::DeleteCursor::Pull(Frame &frame, ExecutionContext &context) { if (expression_result.type() == TypedValue::Type::Edge) { auto &ea = expression_result.ValueEdge(); if (context.auth_checker && - !(context.auth_checker->Accept(*context.db_accessor, ea, - query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE) && - context.auth_checker->Accept(*context.db_accessor, ea.To(), storage::View::NEW, - query::AuthQuery::FineGrainedPrivilege::UPDATE) && - context.auth_checker->Accept(*context.db_accessor, ea.From(), storage::View::NEW, - query::AuthQuery::FineGrainedPrivilege::UPDATE))) { + !(context.auth_checker->Has(ea, query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE) && + context.auth_checker->Has(ea.To(), storage::View::NEW, query::AuthQuery::FineGrainedPrivilege::UPDATE) && + context.auth_checker->Has(ea.From(), storage::View::NEW, query::AuthQuery::FineGrainedPrivilege::UPDATE))) { throw QueryRuntimeException("Edge not deleted due to not having enough permission!"); } auto maybe_value = dba.RemoveEdge(&ea); @@ -2367,8 +2355,7 @@ bool Delete::DeleteCursor::Pull(Frame &frame, ExecutionContext &context) { case TypedValue::Type::Vertex: { auto &va = expression_result.ValueVertex(); if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, va, storage::View::NEW, - query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { + !context.auth_checker->Has(va, storage::View::NEW, query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { throw QueryRuntimeException("Vertex not deleted due to not having enough permission!"); } if (self_.detach_) { @@ -2475,8 +2462,8 @@ bool SetProperty::SetPropertyCursor::Pull(Frame &frame, ExecutionContext &contex switch (lhs.type()) { case TypedValue::Type::Vertex: { if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, lhs.ValueVertex(), storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + !context.auth_checker->Has(lhs.ValueVertex(), storage::View::NEW, + memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw QueryRuntimeException("Vertex property not set due to not having enough permission!"); } @@ -2491,8 +2478,7 @@ bool SetProperty::SetPropertyCursor::Pull(Frame &frame, ExecutionContext &contex } case TypedValue::Type::Edge: { if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, lhs.ValueEdge(), - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + !context.auth_checker->Has(lhs.ValueEdge(), memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw QueryRuntimeException("Edge property not set due to not having enough permission!"); } @@ -2689,8 +2675,8 @@ bool SetProperties::SetPropertiesCursor::Pull(Frame &frame, ExecutionContext &co switch (lhs.type()) { case TypedValue::Type::Vertex: if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, lhs.ValueVertex(), storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + !context.auth_checker->Has(lhs.ValueVertex(), storage::View::NEW, + memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw QueryRuntimeException("Vertex properties not set due to not having enough permission!"); } @@ -2698,8 +2684,7 @@ bool SetProperties::SetPropertiesCursor::Pull(Frame &frame, ExecutionContext &co break; case TypedValue::Type::Edge: if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, lhs.ValueEdge(), - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + !context.auth_checker->Has(lhs.ValueEdge(), memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw QueryRuntimeException("Edge properties not set due to not having enough permission!"); } @@ -2830,8 +2815,8 @@ bool RemoveProperty::RemovePropertyCursor::Pull(Frame &frame, ExecutionContext & switch (lhs.type()) { case TypedValue::Type::Vertex: if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, lhs.ValueVertex(), storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + !context.auth_checker->Has(lhs.ValueVertex(), storage::View::NEW, + memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw QueryRuntimeException("Vertex property not removed due to not having enough permission!"); } @@ -2839,8 +2824,7 @@ bool RemoveProperty::RemovePropertyCursor::Pull(Frame &frame, ExecutionContext & break; case TypedValue::Type::Edge: if (context.auth_checker && - !context.auth_checker->Accept(*context.db_accessor, lhs.ValueEdge(), - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + !context.auth_checker->Has(lhs.ValueEdge(), memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw QueryRuntimeException("Edge property not removed due to not having enough permission!"); } diff --git a/src/query/procedure/mg_procedure_impl.cpp b/src/query/procedure/mg_procedure_impl.cpp index 25c809e5b..98217931e 100644 --- a/src/query/procedure/mg_procedure_impl.cpp +++ b/src/query/procedure/mg_procedure_impl.cpp @@ -1587,9 +1587,10 @@ memgraph::storage::PropertyValue ToPropertyValue(const mgp_value &value) { mgp_error mgp_vertex_set_property(struct mgp_vertex *v, const char *property_name, mgp_value *property_value) { return WrapExceptions([=] { - if (v->graph->ctx && v->graph->ctx->auth_checker && - !v->graph->ctx->auth_checker->Accept(*v->graph->ctx->db_accessor, v->impl, v->graph->view, - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + auto *ctx = v->graph->ctx; + + if (ctx && ctx->auth_checker && + !ctx->auth_checker->Has(v->impl, v->graph->view, memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw AuthorizationException{"Insufficient permissions for setting a property on vertex!"}; } @@ -1613,8 +1614,6 @@ mgp_error mgp_vertex_set_property(struct mgp_vertex *v, const char *property_nam } } - auto &ctx = v->graph->ctx; - ctx->execution_stats[memgraph::query::ExecutionStats::Key::UPDATED_PROPERTIES] += 1; auto *trigger_ctx_collector = ctx->trigger_context_collector; @@ -1634,11 +1633,12 @@ mgp_error mgp_vertex_set_property(struct mgp_vertex *v, const char *property_nam mgp_error mgp_vertex_add_label(struct mgp_vertex *v, mgp_label label) { return WrapExceptions([=] { - if (v->graph->ctx && v->graph->ctx->auth_checker && - !(v->graph->ctx->auth_checker->Accept(*v->graph->ctx->db_accessor, v->impl, v->graph->view, - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE) && - v->graph->ctx->auth_checker->Accept(*v->graph->ctx->db_accessor, {v->graph->impl->NameToLabel(label.name)}, - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE))) { + auto *ctx = v->graph->ctx; + + if (ctx && ctx->auth_checker && + !(ctx->auth_checker->Has(v->impl, v->graph->view, memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE) && + ctx->auth_checker->Has({v->graph->impl->NameToLabel(label.name)}, + memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE))) { throw AuthorizationException{"Insufficient permissions for adding a label to vertex!"}; } @@ -1662,8 +1662,6 @@ mgp_error mgp_vertex_add_label(struct mgp_vertex *v, mgp_label label) { } } - auto &ctx = v->graph->ctx; - ctx->execution_stats[memgraph::query::ExecutionStats::Key::CREATED_LABELS] += 1; if (ctx->trigger_context_collector) { @@ -1674,11 +1672,12 @@ mgp_error mgp_vertex_add_label(struct mgp_vertex *v, mgp_label label) { mgp_error mgp_vertex_remove_label(struct mgp_vertex *v, mgp_label label) { return WrapExceptions([=] { - if (v->graph->ctx && v->graph->ctx->auth_checker && - !(v->graph->ctx->auth_checker->Accept(*v->graph->ctx->db_accessor, v->impl, v->graph->view, - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE) && - v->graph->ctx->auth_checker->Accept(*v->graph->ctx->db_accessor, {v->graph->impl->NameToLabel(label.name)}, - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE))) { + auto *ctx = v->graph->ctx; + + if (ctx && ctx->auth_checker && + !(ctx->auth_checker->Has(v->impl, v->graph->view, memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE) && + ctx->auth_checker->Has({v->graph->impl->NameToLabel(label.name)}, + memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE))) { throw AuthorizationException{"Insufficient permissions for removing a label from vertex!"}; } @@ -1702,8 +1701,6 @@ mgp_error mgp_vertex_remove_label(struct mgp_vertex *v, mgp_label label) { } } - auto &ctx = v->graph->ctx; - ctx->execution_stats[memgraph::query::ExecutionStats::Key::DELETED_LABELS] += 1; if (ctx->trigger_context_collector) { @@ -1861,20 +1858,18 @@ void mgp_edges_iterator_destroy(mgp_edges_iterator *it) { DeleteRawMgpObject(it) namespace { void NextPermittedEdge(mgp_edges_iterator &it, const bool for_in) { - if (!it.source_vertex.graph->ctx || !it.source_vertex.graph->ctx->auth_checker) return; + if (const auto *ctx = it.source_vertex.graph->ctx; !ctx || !ctx->auth_checker) return; auto &impl_it = for_in ? it.in_it : it.out_it; const auto end = for_in ? it.in->end() : it.out->end(); if (impl_it) { const auto *auth_checker = it.source_vertex.graph->ctx->auth_checker.get(); - const auto db_accessor = *it.source_vertex.graph->ctx->db_accessor; const auto view = it.source_vertex.graph->view; while (*impl_it != end) { - if (auth_checker->Accept(db_accessor, **impl_it, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { + if (auth_checker->Has(**impl_it, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { const auto &check_vertex = it.source_vertex.impl == (*impl_it)->From() ? (*impl_it)->To() : (*impl_it)->From(); - if (auth_checker->Accept(db_accessor, check_vertex, view, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { + if (auth_checker->Has(check_vertex, view, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { break; } } @@ -2076,9 +2071,10 @@ mgp_error mgp_edge_get_property(mgp_edge *e, const char *name, mgp_memory *memor mgp_error mgp_edge_set_property(struct mgp_edge *e, const char *property_name, mgp_value *property_value) { return WrapExceptions([=] { - if (e->from.graph->ctx && e->from.graph->ctx->auth_checker && - !e->from.graph->ctx->auth_checker->Accept(*e->from.graph->ctx->db_accessor, e->impl, - memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { + auto *ctx = e->from.graph->ctx; + + if (ctx && ctx->auth_checker && + !ctx->auth_checker->Has(e->impl, memgraph::query::AuthQuery::FineGrainedPrivilege::UPDATE)) { throw AuthorizationException{"Insufficient permissions for setting a property on edge!"}; } @@ -2103,8 +2099,6 @@ mgp_error mgp_edge_set_property(struct mgp_edge *e, const char *property_name, m } } - auto &ctx = e->from.graph->ctx; - ctx->execution_stats[memgraph::query::ExecutionStats::Key::UPDATED_PROPERTIES] += 1; auto *trigger_ctx_collector = e->from.graph->ctx->trigger_context_collector; @@ -2171,7 +2165,7 @@ mgp_error mgp_graph_create_vertex(struct mgp_graph *graph, mgp_memory *memory, m return WrapExceptions( [=]() -> mgp_vertex * { if (graph->ctx && graph->ctx->auth_checker && - !graph->ctx->auth_checker->HasGlobalPermissionOnVertices( + !graph->ctx->auth_checker->HasGlobalPrivilegeOnVertices( memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { throw AuthorizationException{"Insufficient permissions for creating vertices!"}; } @@ -2194,9 +2188,11 @@ mgp_error mgp_graph_create_vertex(struct mgp_graph *graph, mgp_memory *memory, m mgp_error mgp_graph_delete_vertex(struct mgp_graph *graph, mgp_vertex *vertex) { return WrapExceptions([=] { - if (graph->ctx && graph->ctx->auth_checker && - !graph->ctx->auth_checker->Accept(*graph->ctx->db_accessor, vertex->impl, graph->view, - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { + auto *ctx = graph->ctx; + + if (ctx && ctx->auth_checker && + !ctx->auth_checker->Has(vertex->impl, graph->view, + memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { throw AuthorizationException{"Insufficient permissions for deleting a vertex!"}; } @@ -2223,8 +2219,6 @@ mgp_error mgp_graph_delete_vertex(struct mgp_graph *graph, mgp_vertex *vertex) { return; } - auto &ctx = graph->ctx; - ctx->execution_stats[memgraph::query::ExecutionStats::Key::DELETED_NODES] += 1; if (ctx->trigger_context_collector) { @@ -2235,9 +2229,11 @@ mgp_error mgp_graph_delete_vertex(struct mgp_graph *graph, mgp_vertex *vertex) { mgp_error mgp_graph_detach_delete_vertex(struct mgp_graph *graph, mgp_vertex *vertex) { return WrapExceptions([=] { - if (graph->ctx && graph->ctx->auth_checker && - !graph->ctx->auth_checker->Accept(*graph->ctx->db_accessor, vertex->impl, graph->view, - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { + auto *ctx = graph->ctx; + + if (ctx && ctx->auth_checker && + !ctx->auth_checker->Has(vertex->impl, graph->view, + memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { throw AuthorizationException{"Insufficient permissions for deleting a vertex!"}; } @@ -2263,8 +2259,6 @@ mgp_error mgp_graph_detach_delete_vertex(struct mgp_graph *graph, mgp_vertex *ve return; } - auto &ctx = graph->ctx; - ctx->execution_stats[memgraph::query::ExecutionStats::Key::DELETED_NODES] += 1; ctx->execution_stats[memgraph::query::ExecutionStats::Key::DELETED_EDGES] += static_cast<int64_t>((*result)->second.size()); @@ -2288,9 +2282,11 @@ mgp_error mgp_graph_create_edge(mgp_graph *graph, mgp_vertex *from, mgp_vertex * mgp_memory *memory, mgp_edge **result) { return WrapExceptions( [=]() -> mgp_edge * { - if (graph->ctx && graph->ctx->auth_checker && - !graph->ctx->auth_checker->Accept(*graph->ctx->db_accessor, from->graph->impl->NameToEdgeType(type.name), - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { + auto *ctx = graph->ctx; + + if (ctx && ctx->auth_checker && + !ctx->auth_checker->Has(from->graph->impl->NameToEdgeType(type.name), + memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { throw AuthorizationException{"Insufficient permissions for creating edges!"}; } @@ -2312,7 +2308,6 @@ mgp_error mgp_graph_create_edge(mgp_graph *graph, mgp_vertex *from, mgp_vertex * throw SerializationException{"Cannot serialize creating an edge."}; } } - auto &ctx = graph->ctx; ctx->execution_stats[memgraph::query::ExecutionStats::Key::CREATED_EDGES] += 1; @@ -2326,9 +2321,10 @@ mgp_error mgp_graph_create_edge(mgp_graph *graph, mgp_vertex *from, mgp_vertex * mgp_error mgp_graph_delete_edge(struct mgp_graph *graph, mgp_edge *edge) { return WrapExceptions([=] { - if (graph->ctx && graph->ctx->auth_checker && - !graph->ctx->auth_checker->Accept(*graph->ctx->db_accessor, edge->impl, - memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { + auto *ctx = graph->ctx; + + if (ctx && ctx->auth_checker && + !ctx->auth_checker->Has(edge->impl, memgraph::query::AuthQuery::FineGrainedPrivilege::CREATE_DELETE)) { throw AuthorizationException{"Insufficient permissions for deleting an edge!"}; } if (!MgpGraphIsMutable(*graph)) { @@ -2352,7 +2348,6 @@ mgp_error mgp_graph_delete_edge(struct mgp_graph *graph, mgp_edge *edge) { if (!*result) { return; } - auto &ctx = graph->ctx; ctx->execution_stats[memgraph::query::ExecutionStats::Key::DELETED_EDGES] += 1; if (ctx->trigger_context_collector) { @@ -2363,13 +2358,15 @@ mgp_error mgp_graph_delete_edge(struct mgp_graph *graph, mgp_edge *edge) { namespace { void NextPermitted(mgp_vertices_iterator &it) { - if (!it.graph->ctx || !it.graph->ctx->auth_checker) { + const auto *ctx = it.graph->ctx; + + if (!ctx || !ctx->auth_checker) { return; } while (it.current_it != it.vertices.end()) { - if (it.graph->ctx->auth_checker->Accept(*it.graph->ctx->db_accessor, *it.current_it, it.graph->view, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { + if (ctx->auth_checker->Has(*it.current_it, it.graph->view, + memgraph::query::AuthQuery::FineGrainedPrivilege::READ)) { break; } diff --git a/tests/unit/auth_checker.cpp b/tests/unit/auth_checker.cpp index 6bdd5b89e..a62909ba8 100644 --- a/tests/unit/auth_checker.cpp +++ b/tests/unit/auth_checker.cpp @@ -48,85 +48,85 @@ TEST_F(FineGrainedAuthCheckerFixture, GrantedAllLabels) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().label_permissions().Grant("*", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_TRUE(auth_checker.Accept(dba, v1, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v1, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v2, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v2, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v3, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v3, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v1, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v1, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v2, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v2, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v3, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v3, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, GrantedAllEdgeTypes) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().edge_type_permissions().Grant( "*", memgraph::auth::FineGrainedPermission::CREATE_DELETE); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_TRUE(auth_checker.Accept(dba, r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, r2, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, r3, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, r4, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE(auth_checker.Has(r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE(auth_checker.Has(r2, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE(auth_checker.Has(r3, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE(auth_checker.Has(r4, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, DeniedAllLabels) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().label_permissions().Deny("*", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_FALSE(auth_checker.Accept(dba, v1, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v1, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v2, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v2, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v3, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v3, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v1, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v1, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v2, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v2, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v3, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v3, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, DeniedAllEdgeTypes) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().edge_type_permissions().Deny("*", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_FALSE(auth_checker.Accept(dba, r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, r2, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, r3, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, r4, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE(auth_checker.Has(r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE(auth_checker.Has(r2, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE(auth_checker.Has(r3, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE(auth_checker.Has(r4, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, GrantLabel) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().label_permissions().Grant("l1", memgraph::auth::FineGrainedPermission::CREATE_DELETE); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_TRUE(auth_checker.Accept(dba, v1, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v1, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v1, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v1, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, DenyLabel) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().label_permissions().Deny("l3", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_FALSE(auth_checker.Accept(dba, v3, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v3, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v3, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v3, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, GrantAndDenySpecificLabels) { @@ -136,20 +136,20 @@ TEST_F(FineGrainedAuthCheckerFixture, GrantAndDenySpecificLabels) { user.fine_grained_access_handler().label_permissions().Grant("l2", memgraph::auth::FineGrainedPermission::CREATE_DELETE); user.fine_grained_access_handler().label_permissions().Deny("l3", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_TRUE(auth_checker.Accept(dba, v1, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v1, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v2, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v2, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v3, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v3, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v1, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v1, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v2, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v2, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v3, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v3, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, MultipleVertexLabels) { @@ -159,37 +159,37 @@ TEST_F(FineGrainedAuthCheckerFixture, MultipleVertexLabels) { user.fine_grained_access_handler().label_permissions().Grant("l2", memgraph::auth::FineGrainedPermission::CREATE_DELETE); user.fine_grained_access_handler().label_permissions().Deny("l3", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; ASSERT_TRUE(v1.AddLabel(dba.NameToLabel("l3")).HasValue()); ASSERT_TRUE(v2.AddLabel(dba.NameToLabel("l1")).HasValue()); dba.AdvanceCommand(); - ASSERT_FALSE(auth_checker.Accept(dba, v1, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, v1, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v2, memgraph::storage::View::NEW, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, v2, memgraph::storage::View::OLD, - memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v1, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE( + auth_checker.Has(v1, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v2, memgraph::storage::View::NEW, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE( + auth_checker.Has(v2, memgraph::storage::View::OLD, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, GrantEdgeType) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().edge_type_permissions().Grant( "edge_type_1", memgraph::auth::FineGrainedPermission::CREATE_DELETE); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_TRUE(auth_checker.Accept(dba, r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE(auth_checker.Has(r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, DenyEdgeType) { memgraph::auth::User user{"test"}; user.fine_grained_access_handler().edge_type_permissions().Deny("edge_type_1", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_FALSE(auth_checker.Accept(dba, r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE(auth_checker.Has(r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } TEST_F(FineGrainedAuthCheckerFixture, GrantAndDenySpecificEdgeTypes) { @@ -198,10 +198,10 @@ TEST_F(FineGrainedAuthCheckerFixture, GrantAndDenySpecificEdgeTypes) { "edge_type_1", memgraph::auth::FineGrainedPermission::CREATE_DELETE); user.fine_grained_access_handler().edge_type_permissions().Deny("edge_type_2", memgraph::auth::FineGrainedPermission::READ); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; - ASSERT_TRUE(auth_checker.Accept(dba, r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_TRUE(auth_checker.Accept(dba, r2, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, r3, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); - ASSERT_FALSE(auth_checker.Accept(dba, r4, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE(auth_checker.Has(r1, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_TRUE(auth_checker.Has(r2, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE(auth_checker.Has(r3, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); + ASSERT_FALSE(auth_checker.Has(r4, memgraph::query::AuthQuery::FineGrainedPrivilege::READ)); } diff --git a/tests/unit/bfs_common.hpp b/tests/unit/bfs_common.hpp index acb55e784..76707f4b3 100644 --- a/tests/unit/bfs_common.hpp +++ b/tests/unit/bfs_common.hpp @@ -541,7 +541,7 @@ void BfsTestWithFineGrainedFiltering(Database *db, int lower_bound, int upper_bo break; } - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &db_accessor}; context.auth_checker = std::make_unique<memgraph::glue::FineGrainedAuthChecker>(std::move(auth_checker)); // We run BFS once from each vertex for each blocked entity. input_operator = YieldVertices(&db_accessor, vertices, source_symbol, input_operator); diff --git a/tests/unit/query_plan_create_set_remove_delete.cpp b/tests/unit/query_plan_create_set_remove_delete.cpp index 5b559aa8c..f423aa1f6 100644 --- a/tests/unit/query_plan_create_set_remove_delete.cpp +++ b/tests/unit/query_plan_create_set_remove_delete.cpp @@ -94,7 +94,7 @@ TEST(QueryPlan, FineGrainedCreateNodeWithAttributes) { node.labels.emplace_back(label); const auto test_create = [&](memgraph::auth::User &user) { - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &execution_dba}; auto context = MakeContextWithFineGrainedChecker(ast, symbol_table, &execution_dba, &auth_checker); auto create = std::make_shared<CreateNode>(nullptr, node); @@ -189,7 +189,7 @@ TEST(QueryPlan, FineGrainedCreateReturn) { memgraph::auth::User user{"Test"}; user.fine_grained_access_handler().label_permissions().Grant("label", memgraph::auth::FineGrainedPermission::CREATE_DELETE); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); auto results = CollectProduce(*produce, &context); EXPECT_EQ(1, results.size()); @@ -210,7 +210,7 @@ TEST(QueryPlan, FineGrainedCreateReturn) { memgraph::auth::User user{"Test"}; user.fine_grained_access_handler().label_permissions().Deny("label", memgraph::auth::FineGrainedPermission::CREATE_DELETE); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); ASSERT_THROW(CollectProduce(*produce, &context), QueryRuntimeException); } @@ -328,7 +328,7 @@ class CreateExpandWithAuthFixture : public testing::Test { auto create_op = std::make_shared<CreateNode>(nullptr, n); auto create_expand = std::make_shared<CreateExpand>(m, r, create_op, n.symbol, cycle); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*create_expand, &context); dba.AdvanceCommand(); @@ -486,7 +486,7 @@ class MatchCreateNodeWithAuthFixture : public testing::Test { m.labels = labels; // creation op auto create_node = std::make_shared<CreateNode>(n_scan_all.op_, m); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*create_node, &context); @@ -622,7 +622,7 @@ class MatchCreateExpandWithAuthFixture : public testing::Test { ; auto create_expand = std::make_shared<CreateExpand>(m, r, n_scan_all.op_, n_scan_all.sym_, cycle); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*create_expand, &context); dba.AdvanceCommand(); @@ -837,7 +837,7 @@ class DeleteOperatorWithAuthFixture : public testing::Test { auto n = MakeScanAll(storage, symbol_table, "n"); auto n_get = storage.Create<Identifier>("n")->MapTo(n.sym_); Frame frame(symbol_table.max_position()); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); auto delete_op = std::make_shared<plan::Delete>(n.op_, std::vector<Expression *>{n_get}, true); PullAll(*delete_op, &context); @@ -861,7 +861,7 @@ class DeleteOperatorWithAuthFixture : public testing::Test { memgraph::storage::View::NEW); auto r_get = storage.Create<Identifier>("r")->MapTo(r_m.edge_sym_); auto delete_op = std::make_shared<plan::Delete>(r_m.op_, std::vector<Expression *>{r_get}, false); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*delete_op, &context); dba.AdvanceCommand(); @@ -1749,7 +1749,7 @@ class UpdatePropertiesWithAuthFixture : public testing::Test { NEXPR("n", IDENT("n")->MapTo(scan_all.sym_))->MapTo(symbol_table.CreateSymbol("named_expression_1", true)); auto produce = MakeProduce(set_property, output); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*produce, &context); @@ -1766,7 +1766,7 @@ class UpdatePropertiesWithAuthFixture : public testing::Test { auto n_p = PROPERTY_LOOKUP(IDENT("r")->MapTo(expand.edge_sym_), entity_prop); auto set_property = std::make_shared<plan::SetProperty>(expand.op_, entity_prop, n_p, literal); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*set_property, &context); @@ -1788,7 +1788,7 @@ class UpdatePropertiesWithAuthFixture : public testing::Test { NEXPR("n", IDENT("n")->MapTo(scan_all.sym_))->MapTo(symbol_table.CreateSymbol("named_expression_1", true)); auto produce = MakeProduce(set_properties, output); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*produce, &context); @@ -1812,7 +1812,7 @@ class UpdatePropertiesWithAuthFixture : public testing::Test { NEXPR("n", IDENT("n")->MapTo(scan_all.sym_))->MapTo(symbol_table.CreateSymbol("named_expression_1", true)); auto produce = MakeProduce(set_properties, output); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*produce, &context); @@ -1831,7 +1831,7 @@ class UpdatePropertiesWithAuthFixture : public testing::Test { NEXPR("n", IDENT("n")->MapTo(scan_all.sym_))->MapTo(symbol_table.CreateSymbol("named_expression_1", true)); auto produce = MakeProduce(remove_property, output); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*produce, &context); @@ -1847,7 +1847,7 @@ class UpdatePropertiesWithAuthFixture : public testing::Test { auto n_p = PROPERTY_LOOKUP(IDENT("n")->MapTo(expand.edge_sym_), entity_prop); auto remove_property = std::make_shared<plan::RemoveProperty>(expand.op_, entity_prop, n_p); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); PullAll(*remove_property, &context); diff --git a/tests/unit/query_plan_match_filter_return.cpp b/tests/unit/query_plan_match_filter_return.cpp index 8a6aded1e..ece795e2c 100644 --- a/tests/unit/query_plan_match_filter_return.cpp +++ b/tests/unit/query_plan_match_filter_return.cpp @@ -61,7 +61,7 @@ class MatchReturnFixture : public testing::Test { auto output = NEXPR("n", IDENT("n")->MapTo(scan_all.sym_))->MapTo(symbol_table.CreateSymbol("named_expression_1", true)); auto produce = MakeProduce(scan_all.op_, output); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); return PullAll(*produce, &context); } @@ -515,7 +515,7 @@ TEST_F(ExpandFixture, ExpandWithEdgeFiltering) { auto output = NEXPR("m", IDENT("m")->MapTo(r_m.node_sym_))->MapTo(symbol_table.CreateSymbol("named_expression_1", true)); auto produce = MakeProduce(r_m.op_, output); - memgraph::glue::FineGrainedAuthChecker auth_checker{user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{user, &dba}; auto context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); return PullAll(*produce, &context); }; @@ -703,7 +703,7 @@ class QueryPlanExpandVariable : public testing::Test { auto cursor = input_op->MakeCursor(memgraph::utils::NewDeleteResource()); ExecutionContext context; if (user) { - memgraph::glue::FineGrainedAuthChecker auth_checker{*user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{*user, &dba}; context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); } else { context = MakeContext(storage, symbol_table, &dba); @@ -721,7 +721,7 @@ class QueryPlanExpandVariable : public testing::Test { auto cursor = input_op->MakeCursor(memgraph::utils::NewDeleteResource()); ExecutionContext context; if (user) { - memgraph::glue::FineGrainedAuthChecker auth_checker{*user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{*user, &dba}; context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); } else { context = MakeContext(storage, symbol_table, &dba); @@ -1796,7 +1796,7 @@ class QueryPlanExpandWeightedShortestPath : public testing::Test { std::vector<ResultType> results; memgraph::query::ExecutionContext context; if (user) { - memgraph::glue::FineGrainedAuthChecker auth_checker{*user}; + memgraph::glue::FineGrainedAuthChecker auth_checker{*user, &dba}; context = MakeContextWithFineGrainedChecker(storage, symbol_table, &dba, &auth_checker); } else { context = MakeContext(storage, symbol_table, &dba); diff --git a/tests/unit/query_trigger.cpp b/tests/unit/query_trigger.cpp index cecdb9198..e1325e76a 100644 --- a/tests/unit/query_trigger.cpp +++ b/tests/unit/query_trigger.cpp @@ -39,8 +39,9 @@ class MockAuthChecker : public memgraph::query::AuthChecker { public: MOCK_CONST_METHOD2(IsUserAuthorized, bool(const std::optional<std::string> &username, const std::vector<memgraph::query::AuthQuery::Privilege> &privileges)); - MOCK_CONST_METHOD1(GetFineGrainedAuthChecker, - std::unique_ptr<memgraph::query::FineGrainedAuthChecker>(const std::string &username)); + MOCK_CONST_METHOD2(GetFineGrainedAuthChecker, + std::unique_ptr<memgraph::query::FineGrainedAuthChecker>( + const std::string &username, const memgraph::query::DbAccessor *db_accessor)); }; } // namespace