Merge pull request #1647 from strongloop/fix-1646
Allow hidden/protected props as an object
This commit is contained in:
commit
726c6978fc
22
lib/dao.js
22
lib/dao.js
|
@ -1646,22 +1646,32 @@ function coerceArray(val) {
|
|||
|
||||
DataAccessObject._getHiddenProperties = function() {
|
||||
var settings = this.definition.settings || {};
|
||||
var result = settings.hiddenProperties || settings.hidden;
|
||||
var result = settings.hiddenProperties || settings.hidden || [];
|
||||
if (typeof result === 'string') {
|
||||
result = [result];
|
||||
}
|
||||
result = result || [];
|
||||
return result;
|
||||
if (Array.isArray(result)) {
|
||||
return result;
|
||||
} else {
|
||||
// See https://github.com/strongloop/loopback-datasource-juggler/issues/1646
|
||||
// `ModelBaseClass` normalize the properties to an object such as `{secret: true}`
|
||||
return Object.keys(result);
|
||||
}
|
||||
};
|
||||
|
||||
DataAccessObject._getProtectedProperties = function() {
|
||||
var settings = this.definition.settings || {};
|
||||
var result = settings.protectedProperties || settings.protected;
|
||||
var result = settings.protectedProperties || settings.protected || [];
|
||||
if (typeof result === 'string') {
|
||||
result = [result];
|
||||
}
|
||||
result = result || [];
|
||||
return result;
|
||||
if (Array.isArray(result)) {
|
||||
return result;
|
||||
} else {
|
||||
// See https://github.com/strongloop/loopback-datasource-juggler/issues/1646
|
||||
// `ModelBaseClass` normalize the properties to an object such as `{secret: true}`
|
||||
return Object.keys(result);
|
||||
}
|
||||
};
|
||||
|
||||
DataAccessObject._sanitize = function(query, options) {
|
||||
|
|
|
@ -551,7 +551,7 @@ ModelBaseClass.prototype.toObject = function(onlySchema, removeHidden, removePro
|
|||
/**
|
||||
* Checks if property is protected.
|
||||
* @param {String} propertyName Property name
|
||||
* @returns {Boolean} true or false if proptected or not.
|
||||
* @returns {Boolean} true or false if protected or not.
|
||||
*/
|
||||
ModelBaseClass.isProtectedProperty = function(propertyName) {
|
||||
var Model = this;
|
||||
|
|
|
@ -338,26 +338,46 @@ describe('ModelDefinition class', function() {
|
|||
|
||||
describe('hidden properties', function() {
|
||||
var Child;
|
||||
beforeEach(givenChildren);
|
||||
|
||||
it('should be removed if used in where', function() {
|
||||
return Child.find({
|
||||
where: {secret: 'guess'},
|
||||
}).then(assertHiddenPropertyIsIgnored);
|
||||
describe('with hidden array', function() {
|
||||
beforeEach(function() { givenChildren(); });
|
||||
|
||||
it('should be removed if used in where', function() {
|
||||
return Child.find({
|
||||
where: {secret: 'guess'},
|
||||
}).then(assertHiddenPropertyIsIgnored);
|
||||
});
|
||||
|
||||
it('should be removed if used in where.and', function() {
|
||||
return Child.find({
|
||||
where: {and: [{secret: 'guess'}]},
|
||||
}).then(assertHiddenPropertyIsIgnored);
|
||||
});
|
||||
});
|
||||
|
||||
it('should be removed if used in where.and', function() {
|
||||
return Child.find({
|
||||
where: {and: [{secret: 'guess'}]},
|
||||
}).then(assertHiddenPropertyIsIgnored);
|
||||
describe('with hidden object', function() {
|
||||
beforeEach(function() { givenChildren({hiddenProperties: {secret: true}}); });
|
||||
|
||||
it('should be removed if used in where', function() {
|
||||
return Child.find({
|
||||
where: {secret: 'guess'},
|
||||
}).then(assertHiddenPropertyIsIgnored);
|
||||
});
|
||||
|
||||
it('should be removed if used in where.and', function() {
|
||||
return Child.find({
|
||||
where: {and: [{secret: 'guess'}]},
|
||||
}).then(assertHiddenPropertyIsIgnored);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Create two children with a hidden property, one with a matching
|
||||
* value, the other with a non-matching value
|
||||
*/
|
||||
function givenChildren() {
|
||||
Child = memory.createModel('child', {}, {hidden: ['secret']});
|
||||
function givenChildren(hiddenProps) {
|
||||
hiddenProps = hiddenProps || {hidden: ['secret']};
|
||||
Child = memory.createModel('child', {}, hiddenProps);
|
||||
return Child.create([{
|
||||
name: 'childA',
|
||||
secret: 'secret',
|
||||
|
|
Loading…
Reference in New Issue