ビットフラグ

権限などの管理はビットフラグを使うと楽そうです。

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 & 0b1000b100(4)です。
上記コードでEXECUTABLE0b100で判断しようとしていて、executableUserpermission: 0b111を持っているのでBoolean(0b100 & 0b111)trueとなります。readableUserでは0b100 & 0b001 === 0b000falseとなるので権限を持っていないことがわかります。

OR

片方が1なら1になります。権限を付与する時などに。0b100 | 0b001 === 0b101