0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-11-24 16:46:00 +01:00
mongodb/jstests/auth/user_roles_empty.js
2023-08-06 20:48:04 +00:00

41 lines
1.9 KiB
JavaScript

// Tests that $$USER_ROLES works as expected in a find command when the array returned by
// $$USER_ROLES is empty and when mongod was started with auth disabled.
// @tags: [requires_fcv_70]
const mongod = MongoRunner.runMongod();
const dbName = "test";
const db = mongod.getDB(dbName);
// We need to create a collection for the following findOne() to run upon and we need to insert
// a document in that collection so that the findOne() actually has a document to project the
// $$USER_ROLES onto.
assert.commandWorked(db.coll.insert({a: 1, allowedRoles: "all"}));
// When no user is authenticated, $$USER_ROLES evaluates to an empty array. Note that we are
// "authorized" to run this find command because we did not initialize the mongod with any "auth"
// specification.
let result = db.coll.findOne({}, {myRoles: "$$USER_ROLES"});
assert.eq([], result.myRoles);
// Create and authenticate a user that does not have any roles. In this case, $$USER_ROLES will
// also evaluate to an empty array. Because we did not initialize the mongod with any "auth"
// specification, we are "authorized" as this user to execute the following find command even though
// the user does not have read privileges.
assert.commandWorked(db.runCommand({createUser: "user", pwd: "pwd", roles: []}));
db.auth("user", "pwd");
result = db.coll.findOne({}, {myRoles: "$$USER_ROLES"});
assert.eq([], result.myRoles);
db.logout();
// Create and authenticate a user that does have roles. Here, we want to test that $$USER_ROLES
// provides the correct value in the case where mongod was started with auth disbaled.
assert.commandWorked(
db.runCommand({createUser: "user2", pwd: "pwd", roles: [{role: "read", db: dbName}]}));
db.auth("user2", "pwd");
result = db.coll.findOne({}, {myRoles: "$$USER_ROLES"});
assert.eq([{_id: dbName + ".read", role: "read", db: dbName}], result.myRoles);
MongoRunner.stopMongod(mongod);