Reputation: 2675
I have an object which defines a set of user permissions initially set to false. I have an array which contains multiple elements. Based on each element, I need to update the permissions object.
Below is the sample code.
var environment = 'DEV';
var permissions = {
superadmin: false,
admin: false,
developer: false,
tester: false,
general: false,
grp1: false,
grp2: false,
grp3: false,
grp4: false,
grp5: false,
env: environment
};
var user = " azg_environment_DEV_grp4%2Cazg_environment_DEV_Admin%2Cazg_environment_DEV_grp5%2Cazg";
var decodeURIUser = decodeURIComponent(user).split(",");
var permissionsArray = _.filter(decodeURIUser, function(s) {
return s.indexOf('azg_environment_') !== -1;
});
var permissionsList = _.filter(permissionsArray, function(e) {
return e.indexOf(environment) !== -1
});
console.log(permissionsList);
if (_.some(permissionsList, function(e) {
return e.indexOf("SuperAdmin") !== -1
})) {
permissions.superadmin = true;
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Admin") !== -1
})) {
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Developer") !== -1
})) {
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Tester") !== -1
})) {
permissions.tester = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp1") !== -1
})) {
permissions.grp1 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp2") !== -1
})) {
permissions.grp2 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp3") !== -1
})) {
permissions.grp3 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp4") !== -1
})) {
permissions.grp4 = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("grp5") !== -1
})) {
permissions.grp5 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("General") !== -1
})) {
permissions.general = true;
}
console.log(permissions);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
The function doesnt update grp5 to true. How do I achieve that so my final object would be
var permissions = {
superadmin: true,
admin: false,
developer: true,
tester: true,
general: true,
grp1: false,
grp2: false,
grp3: false,
grp4: true,
grp5: true,
env: environment
};
Upvotes: 0
Views: 44
Reputation: 36703
It is because you are doing if(){ .. } else if(){ ... }
when it comes to grp
comparison.
It is getting true for grp4
so it is not checking grp5
.
You just need multiple if
's
var environment = 'DEV';
var permissions = {
superadmin: false,
admin: false,
developer: false,
tester: false,
general: false,
grp1: false,
grp2: false,
grp3: false,
grp4: false,
grp5: false,
env: environment
};
var user = " azg_environment_DEV_grp4%2Cazg_environment_DEV_Admin%2Cazg_environment_DEV_grp5%2Cazg";
var decodeURIUser = decodeURIComponent(user).split(",");
var permissionsArray = _.filter(decodeURIUser, function(s) {
return s.indexOf('azg_environment_') !== -1;
});
var permissionsList = _.filter(permissionsArray, function(e) {
return e.indexOf(environment) !== -1
});
console.log(permissionsList);
if (_.some(permissionsList, function(e) {
return e.indexOf("SuperAdmin") !== -1
})) {
permissions.superadmin = true;
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Admin") !== -1
})) {
permissions.admin = true;
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Developer") !== -1
})) {
permissions.developer = true;
permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
return e.indexOf("Tester") !== -1
})) {
permissions.tester = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp1") !== -1
})) {
permissions.grp1 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp2") !== -1
})) {
permissions.grp2 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp3") !== -1
})) {
permissions.grp3 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp4") !== -1
})) {
permissions.grp4 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("grp5") !== -1
})) {
permissions.grp5 = true;
}
if (_.some(permissionsList, function(e) {
return e.indexOf("General") !== -1
})) {
permissions.general = true;
}
console.log(permissions);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
FYI There might be easier ways to achieve what you are trying to do here without lots of _.some
. Think.
Update (one possible minor code optimization)
function checkPresence(permissionsList, str){
_.some(permissionsList, function(e) {
return e.indexOf("grp1") !== -1
})
}
and now use it in your code everywhere you are doing _.some
if(permissionsList, "General"){
// ....
}
Upvotes: 2