Merge pull request #7155 from Elias481/bugfix/evaluatefilter-assign-this-scope-6874

use current frame scope for permission filter function calls
This commit is contained in:
Michael Friedrich 2019-05-03 16:53:40 +02:00 committed by GitHub
commit edaaaae1e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 3 additions and 3 deletions

View File

@ -157,7 +157,7 @@ void FilterUtility::CheckPermission(const ApiUser::Ptr& user, const String& perm
if (filter && permissionFilter) { if (filter && permissionFilter) {
std::vector<std::unique_ptr<Expression> > args; std::vector<std::unique_ptr<Expression> > args;
args.emplace_back(new GetScopeExpression(ScopeLocal)); args.emplace_back(new GetScopeExpression(ScopeThis));
std::unique_ptr<Expression> indexer{new IndexerExpression(std::unique_ptr<Expression>(MakeLiteral(filter)), std::unique_ptr<Expression>(MakeLiteral("call")))}; std::unique_ptr<Expression> indexer{new IndexerExpression(std::unique_ptr<Expression>(MakeLiteral(filter)), std::unique_ptr<Expression>(MakeLiteral("call")))};
FunctionCallExpression *fexpr = new FunctionCallExpression(std::move(indexer), std::move(args)); FunctionCallExpression *fexpr = new FunctionCallExpression(std::move(indexer), std::move(args));
@ -192,7 +192,7 @@ std::vector<Value> FilterUtility::GetFilterTargets(const QueryDescription& qd, c
CheckPermission(user, qd.Permission, &permissionFilter); CheckPermission(user, qd.Permission, &permissionFilter);
Namespace::Ptr permissionFrameNS = new Namespace(); Namespace::Ptr permissionFrameNS = new Namespace();
ScriptFrame permissionFrame(true, permissionFrameNS); ScriptFrame permissionFrame(false, permissionFrameNS);
for (const String& type : qd.Types) { for (const String& type : qd.Types) {
String attr = type; String attr = type;
@ -243,7 +243,7 @@ std::vector<Value> FilterUtility::GetFilterTargets(const QueryDescription& qd, c
BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid type specified for this query.")); BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid type specified for this query."));
Namespace::Ptr frameNS = new Namespace(); Namespace::Ptr frameNS = new Namespace();
ScriptFrame frame(true, frameNS); ScriptFrame frame(false, frameNS);
frame.Sandboxed = true; frame.Sandboxed = true;
if (query->Contains("filter")) { if (query->Contains("filter")) {