Merge pull request #2296 from strongloop/backport/do-not-allow-duplicate-role-names
Backport/do not allow duplicate role names
This commit is contained in:
commit
9311e918cb
|
@ -445,4 +445,6 @@ module.exports = function(Role) {
|
|||
if (callback) callback(err, roles);
|
||||
});
|
||||
};
|
||||
|
||||
Role.validatesUniquenessOf('name', { message: 'already exists' });
|
||||
};
|
||||
|
|
|
@ -15,7 +15,6 @@ var async = require('async');
|
|||
var expect = require('chai').expect;
|
||||
|
||||
function checkResult(err, result) {
|
||||
// console.log(err, result);
|
||||
assert(!err);
|
||||
}
|
||||
|
||||
|
@ -65,11 +64,10 @@ describe('role model', function() {
|
|||
});
|
||||
|
||||
it('should define role/user relations', function() {
|
||||
|
||||
User.create({name: 'Raymond', email: 'x@y.com', password: 'foobar'}, function(err, user) {
|
||||
// console.log('User: ', user.id);
|
||||
Role.create({name: 'userRole'}, function(err, role) {
|
||||
role.principals.create({principalType: RoleMapping.USER, principalId: user.id}, function(err, p) {
|
||||
User.create({ name: 'Raymond', email: 'x@y.com', password: 'foobar' }, function(err, user) {
|
||||
Role.create({ name: 'userRole' }, function(err, role) {
|
||||
role.principals.create({ principalType: RoleMapping.USER, principalId: user.id },
|
||||
function(err, p) {
|
||||
Role.find(function(err, roles) {
|
||||
assert(!err);
|
||||
assert.equal(roles.length, 1);
|
||||
|
@ -77,7 +75,6 @@ describe('role model', function() {
|
|||
});
|
||||
role.principals(function(err, principals) {
|
||||
assert(!err);
|
||||
// console.log(principals);
|
||||
assert.equal(principals.length, 1);
|
||||
assert.equal(principals[0].principalType, RoleMapping.USER);
|
||||
assert.equal(principals[0].principalId, user.id);
|
||||
|
@ -93,11 +90,25 @@ describe('role model', function() {
|
|||
|
||||
});
|
||||
|
||||
it('should automatically generate role id', function() {
|
||||
it('should not allow duplicate role name', function(done) {
|
||||
Role.create({ name: 'userRole' }, function(err, role) {
|
||||
if (err) return done(err);
|
||||
|
||||
User.create({name: 'Raymond', email: 'x@y.com', password: 'foobar'}, function(err, user) {
|
||||
// console.log('User: ', user.id);
|
||||
Role.create({name: 'userRole'}, function(err, role) {
|
||||
Role.create({ name: 'userRole' }, function(err, role) {
|
||||
expect(err).to.exist; //jshint ignore:line
|
||||
expect(err).to.have.property('name', 'ValidationError');
|
||||
expect(err).to.have.deep.property('details.codes.name');
|
||||
expect(err.details.codes.name).to.contain('uniqueness');
|
||||
expect(err).to.have.property('statusCode', 422);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should automatically generate role id', function() {
|
||||
User.create({ name: 'Raymond', email: 'x@y.com', password: 'foobar' }, function(err, user) {
|
||||
Role.create({ name: 'userRole' }, function(err, role) {
|
||||
assert(role.id);
|
||||
role.principals.create({principalType: RoleMapping.USER, principalId: user.id}, function(err, p) {
|
||||
assert(p.id);
|
||||
|
@ -109,7 +120,6 @@ describe('role model', function() {
|
|||
});
|
||||
role.principals(function(err, principals) {
|
||||
assert(!err);
|
||||
// console.log(principals);
|
||||
assert.equal(principals.length, 1);
|
||||
assert.equal(principals[0].principalType, RoleMapping.USER);
|
||||
assert.equal(principals[0].principalId, user.id);
|
||||
|
@ -126,13 +136,12 @@ describe('role model', function() {
|
|||
});
|
||||
|
||||
it('should support getRoles() and isInRole()', function() {
|
||||
User.create({name: 'Raymond', email: 'x@y.com', password: 'foobar'}, function(err, user) {
|
||||
// console.log('User: ', user.id);
|
||||
Role.create({name: 'userRole'}, function(err, role) {
|
||||
role.principals.create({principalType: RoleMapping.USER, principalId: user.id}, function(err, p) {
|
||||
// Role.find(console.log);
|
||||
// role.principals(console.log);
|
||||
Role.isInRole('userRole', {principalType: RoleMapping.USER, principalId: user.id}, function(err, exists) {
|
||||
User.create({ name: 'Raymond', email: 'x@y.com', password: 'foobar' }, function(err, user) {
|
||||
Role.create({ name: 'userRole' }, function(err, role) {
|
||||
role.principals.create({ principalType: RoleMapping.USER, principalId: user.id },
|
||||
function(err, p) {
|
||||
Role.isInRole('userRole', { principalType: RoleMapping.USER, principalId: user.id },
|
||||
function(err, exists) {
|
||||
assert(!err && exists === true);
|
||||
});
|
||||
|
||||
|
@ -209,9 +218,9 @@ describe('role model', function() {
|
|||
assert(!err && yes);
|
||||
});
|
||||
|
||||
// console.log('User: ', user.id);
|
||||
Album.create({name: 'Album 1', userId: user.id}, function(err, album1) {
|
||||
Role.isInRole(Role.OWNER, {principalType: ACL.USER, principalId: user.id, model: Album, id: album1.id}, function(err, yes) {
|
||||
Album.create({ name: 'Album 1', userId: user.id }, function(err, album1) {
|
||||
var role = { principalType: ACL.USER, principalId: user.id, model: Album, id: album1.id };
|
||||
Role.isInRole(Role.OWNER, role, function(err, yes) {
|
||||
assert(!err && yes);
|
||||
});
|
||||
Album.create({name: 'Album 2'}, function(err, album2) {
|
||||
|
@ -233,6 +242,7 @@ describe('role model', function() {
|
|||
password: 'jpass'
|
||||
}, function(err, u) {
|
||||
if (err) return done(err);
|
||||
|
||||
user = u;
|
||||
User.create({
|
||||
username: 'mary',
|
||||
|
@ -240,15 +250,18 @@ describe('role model', function() {
|
|||
password: 'mpass'
|
||||
}, function(err, u) {
|
||||
if (err) return done(err);
|
||||
|
||||
Application.create({
|
||||
name: 'demo'
|
||||
}, function(err, a) {
|
||||
if (err) return done(err);
|
||||
|
||||
app = a;
|
||||
Role.create({
|
||||
name: 'admin'
|
||||
}, function(err, r) {
|
||||
if (err) return done(err);
|
||||
|
||||
role = r;
|
||||
var principals = [
|
||||
{
|
||||
|
@ -272,7 +285,9 @@ describe('role model', function() {
|
|||
it('should resolve user by id', function(done) {
|
||||
ACL.resolvePrincipal(ACL.USER, user.id, function(err, u) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(u.id).to.eql(user.id);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -280,7 +295,9 @@ describe('role model', function() {
|
|||
it('should resolve user by username', function(done) {
|
||||
ACL.resolvePrincipal(ACL.USER, user.username, function(err, u) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(u.username).to.eql(user.username);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -288,7 +305,9 @@ describe('role model', function() {
|
|||
it('should resolve user by email', function(done) {
|
||||
ACL.resolvePrincipal(ACL.USER, user.email, function(err, u) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(u.email).to.eql(user.email);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -296,7 +315,9 @@ describe('role model', function() {
|
|||
it('should resolve app by id', function(done) {
|
||||
ACL.resolvePrincipal(ACL.APP, app.id, function(err, a) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(a.id).to.eql(app.id);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -304,7 +325,9 @@ describe('role model', function() {
|
|||
it('should resolve app by name', function(done) {
|
||||
ACL.resolvePrincipal(ACL.APP, app.name, function(err, a) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(a.name).to.eql(app.name);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -312,7 +335,9 @@ describe('role model', function() {
|
|||
it('should report isMappedToRole by user.username', function(done) {
|
||||
ACL.isMappedToRole(ACL.USER, user.username, 'admin', function(err, flag) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(flag).to.eql(true);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -320,7 +345,9 @@ describe('role model', function() {
|
|||
it('should report isMappedToRole by user.email', function(done) {
|
||||
ACL.isMappedToRole(ACL.USER, user.email, 'admin', function(err, flag) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(flag).to.eql(true);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -329,7 +356,9 @@ describe('role model', function() {
|
|||
function(done) {
|
||||
ACL.isMappedToRole(ACL.USER, 'mary', 'admin', function(err, flag) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(flag).to.eql(false);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -337,7 +366,9 @@ describe('role model', function() {
|
|||
it('should report isMappedToRole by app.name', function(done) {
|
||||
ACL.isMappedToRole(ACL.APP, app.name, 'admin', function(err, flag) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(flag).to.eql(true);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -345,7 +376,9 @@ describe('role model', function() {
|
|||
it('should report isMappedToRole by app.name', function(done) {
|
||||
ACL.isMappedToRole(ACL.APP, app.name, 'admin', function(err, flag) {
|
||||
if (err) return done(err);
|
||||
|
||||
expect(flag).to.eql(true);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -383,6 +416,7 @@ describe('role model', function() {
|
|||
role[pluralName](function(err, models) {
|
||||
assert(!err);
|
||||
assert.equal(models.length, 1);
|
||||
|
||||
if (++runs === mappings.length) {
|
||||
done();
|
||||
}
|
||||
|
@ -404,6 +438,7 @@ describe('role model', function() {
|
|||
assert.equal(users.length, 1);
|
||||
assert.equal(users[0].id, user.id);
|
||||
assert(User.find.calledWith(query));
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue