0

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

};

0

1 Answer 1

2

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"){
   // ....
}
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks void. That works. Is there an easy way to code this without doing a lot of repetition in code?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.