Reputation: 13
var roles = {
Guest: ["CAN_REGISTER"],
Player: ["CAN_LOGIN", "CAN_CHAT"],
Admin: ["CAN_KICK", "CAN_LOGIN", "CAN_CHAT"]
};
that is my object and I am trying to check if the user has specific perms
get_perms: function(player, perm) {
let arrayLength = accounts.length;
let name = player.name;
if (arrayLength == 0 && (perm == "CAN_CHAT" || perm == "CAN_LOGIN" || perm == "CAN_KICK")){
return false;
}
for (var i = 0; i < arrayLength; i++)
{
if (accounts[i][0] == name)
{
for (var key in roles)
{
if (roles.hasOwnProperty(key))
{
if (accounts[i][2] == key){
if (roles[key] == perm){
for (var x = 0; x < roles[key].length; x++){
if (roles[key][x] == perm){
return true;
}
}
}
}
}
}
}
else{
return false;
}
}
}
account[i][2]
is the role of the player which matches the name, I am trying to check if that role has perm
which is sent to the function, for example "CHAT_PERMS"
Upvotes: 0
Views: 48
Reputation: 2865
const roles = {
Guest: ["CAN_REGISTER"],
Player: ["CAN_LOGIN", "CAN_CHAT"],
Admin: ["CAN_KICK", "CAN_LOGIN", "CAN_CHAT"]
};
const arr = Object.keys(roles).reduce((acc, cur) => [...acc, ...roles[cur]], []);
console.log(arr);
const rightSet = new Set(arr);
console.log(rightSet.has("CAN_CHAT"))
This is my solution using ES6:
[ "CAN_REGISTER", "CAN_LOGIN", "CAN_CHAT", "CAN_KICK", "CAN_LOGIN", "CAN_CHAT" ]
has()
function to check if the right in the Set
Upvotes: 1
Reputation: 33726
Use a for-loop
and the function includes
to check the role and permission.
var roles = {
Guest: ["CAN_REGISTER"],
Player: ["CAN_LOGIN", "CAN_CHAT"],
Admin: ["CAN_KICK", "CAN_LOGIN", "CAN_CHAT"]
};
var playerRoles = ['Admin', 'Guest'];
var perm = 'CAN_LOGIN';
var found = false;
for (var role of playerRoles) {
if ((found = roles[role].includes(perm))) {
console.log("Permission '"+perm+"' found in Role '" + role + "'");
break;
}
}
if (!found) {
console.log("Permission '"+perm+"' didn't found");
}
Upvotes: 0