Files
mongo/jstests/auth/implicit_privileges.js

92 lines
2.9 KiB
JavaScript

// Test implicit privilege acquisition.
//
// TODO: Rewrite user document creation portion of test when addUser shell helper is updated.
// Raises an exception if "status" is not a GetLastError object indicating success.
function assertGLEOK(status) {
assert(status.ok && status.err === null,
"Expected OK status object; found " + tojson(status));
}
// Raises an exception if "status" is not a GetLastError object indicating failure.
function assertGLENotOK(status) {
assert(status.ok && status.err !== null,
"Expected not-OK status object; found " + tojson(status));
}
// Asserts that inserting "obj" into "collection" succeeds.
function assertInsertSucceeds(collection, obj) {
collection.insert(obj);
assertGLEOK(collection.getDB().getLastErrorObj());
}
// Asserts that inserting "obj" into "collection" fails.
function assertInsertFails(collection, obj) {
collection.insert(obj);
assertGLENotOK(collection.getDB().getLastErrorObj());
}
// Runs the function "action" with database objects for every database named in "dbNames", using
// "conn" as the connection object.
function withDbs(conn, dbNames, action) {
var dbs = [];
var i;
for (i = 0; i < dbNames.length; ++i) {
dbs.push(conn.getDB(dbNames[i]));
}
action.apply(null, dbs);
}
var conn = MongoRunner.runMongod({ auth: "", smallfiles: "" });
var admin = conn.getDB("admin");
var test = conn.getDB("test");
var test2 = conn.getDB("test2");
assertInsertSucceeds(admin.system.users,
{ user: 'root',
pwd: hex_md5('root:mongo:a'),
roles: ["clusterAdmin",
"readWriteAnyDatabase",
"dbAdminAnyDatabase",
"userAdminAnyDatabase"]
});
var andyAddUserCommandTestDb = {
createUser: 1,
user: "andy",
pwd: "a",
roles: [ "readWrite" ]
};
var andyAddUserCommandTest2Db = {
createUser: 1,
user: "andy",
userSource: "test",
roles: [ "read" ]
};
assertInsertFails(test.foo, {});
assert.commandFailed(test.runCommand(andyAddUserCommandTestDb));
assert.throws(function() { test.foo.findOne(); });
assert.throws(function() { test2.foo.findOne(); } );
assert(admin.auth('root', 'a'));
assert.commandWorked(test.runCommand(andyAddUserCommandTestDb));
assert.commandWorked(test2.runCommand(andyAddUserCommandTest2Db));
assertInsertSucceeds(test.foo, {_id: 0});
assertInsertSucceeds(test2.foo, {_id: 0});
admin.logout();
assert(test.auth('andy', 'a'));
assertInsertSucceeds(test.foo, {_id: 1});
assertInsertFails(test2.foo, {_id: 1});
assert.eq(test.foo.findOne({_id: 1})._id, 1);
assert.eq(test2.foo.findOne({_id: 0})._id, 0);
assert(test.logout());
assertInsertFails(test.foo, {});
assert.commandFailed(test.runCommand(andyAddUserCommandTestDb));
assert.throws(function() { test.foo.findOne(); });
assert.throws(function() { test2.foo.findOne(); } );