• ..

JavaScript

    ビットフラグ

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

    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