権限などの管理はビットフラグを使うと楽そうです。
例
const EXECUTABLE = 1 << 2;
const WRITABLE = 1 << 1;
const READABLE = 1;
const executes = user => {
return Boolean(EXECUTABLE & user.permission);
};
const writes = user => {
return Boolean(WRITABLE & user.permission);
};
const reads = user => {
return Boolean(READABLE & user.permission);
};
const executableUser = {permission: 0b111};
const writableUser = {permission: 0b011};
const readableUser = {permission: 0b001};
const process = user => {
switch (true) {
case executes(user): {
console.log('execute!');
break;
}
case writes(user): {
console.log('write!');
break;
}
case reads(user): {
console.log('read!');
break;
}
default: {
throw new Error('');
}
}
};
[executableUser, writableUser, readableUser].forEach(process);
// execute!\nwrite!\nread!\nAND
両方が1の場合のみ1になります。0b101 & 0b100は0b100(4)です。
上記コードでEXECUTABLEは0b100で判断しようとしていて、executableUserはpermission: 0b111を持っているのでBoolean(0b100 & 0b111)はtrueとなります。readableUserでは0b100 & 0b001 === 0b000でfalseとなるので権限を持っていないことがわかります。
OR
片方が1なら1になります。権限を付与する時などに。0b100 | 0b001 === 0b101。