権限などの管理はビットフラグを使うと楽そうです。
例
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!\n
AND
両方が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
。