fix: Maintenance key blocked from querying protected fields (#10290)

This commit is contained in:
Manuel
2026-03-23 03:50:45 +00:00
committed by GitHub
parent b39186d5e2
commit 7c8b213d96
2 changed files with 34 additions and 1 deletions
+33
View File
@@ -2368,4 +2368,37 @@ describe('ProtectedFields', function () {
expect(response.data.secretField).toBeUndefined();
});
});
describe('maintenance auth', function () {
it('should allow maintenance auth to query using protected fields as WHERE keys', async function () {
await reconfigureServer({
protectedFields: { _User: { '*': ['email', 'emailVerified'] } },
protectedFieldsOwnerExempt: false,
});
const user = new Parse.User();
user.setUsername('testuser');
user.setPassword('password');
user.setEmail('test@example.com');
await user.signUp();
// Query using a protected field as a WHERE key with maintenance auth
const Auth = require('../lib/Auth');
const Config = require('../lib/Config');
const RestQuery = require('../lib/RestQuery');
const config = Config.get('test');
const maintenanceAuth = Auth.maintenance(config);
const query = await RestQuery({
method: RestQuery.Method.get,
config,
auth: maintenanceAuth,
className: '_User',
restWhere: { email: 'test@example.com' },
runBeforeFind: false,
});
const result = await query.execute();
expect(result.results.length).toBe(1);
expect(result.results[0].objectId).toBe(user.id);
});
});
});
+1 -1
View File
@@ -896,7 +896,7 @@ _UnsafeRestQuery.prototype.runCount = function () {
};
_UnsafeRestQuery.prototype.denyProtectedFields = async function () {
if (this.auth.isMaster) {
if (this.auth.isMaster || this.auth.isMaintenance) {
return;
}
const schemaController = await this.config.database.loadSchema();