默认javascript语言

博文

逻辑运算

1. & 按位与
2. | 按位或
3. ^ 按位异或
4. ~ 按位非
5. <<左移
6. >>有符号右移
7. >>>无符号右移

异或

具体实现(javascript版)

class Permission {
  // 是否允许查询,二进制第1位,0表示否,1表示是
  static SELECT = 1 << 0; // 0001
  // 是否允许新增,二进制第2位,0表示否,1表示是
  static INSERT = 1 << 1; // 0010
  // 是否允许修改,二进制第3位,0表示否,1表示是
  static UPDATE = 1 << 2; // 0100
  // 是否允许删除,二进制第4位,0表示否,1表示是
  static REMOVE = 1 << 3; // 1000
  // 存储目前的权限状态
  static TEST = 1 << 4;
  constructor() {
    this.flag = 0;
  }

  /**
   *  重新设置权限
   */
  setPermission(permission) {
    this.flag = permission;
  }

  /**
   *  添加一项或多项权限
   */
  enable(permission) {
    this.flag |= permission;
  }

  /**
   *  删除一项或多项权限
   */
  disable(permission) {
    this.flag &= ~permission;
  }

  /**
   *  是否拥某些权限
   */
  isAllow(permission) {
    console.log(this.flag);
    console.log(permission);
    return (this.flag & permission) == permission;
  }

  /**
   *  是否禁用了某些权限
   */
  isNotAllow(permission) {
    return (this.flag & permission) == 0;
  }

  /**
   *  是否仅仅拥有某些权限
   */
  isOnlyAllow(permission) {
    console.log(permission, this.flag);
    return this.flag == permission;
  }
}