private static void addCellPermissions(final byte[] perms, Map<byte[], List<Cell>> familyMap) {
    // Iterate over the entries in the familyMap, replacing the cells therein
    // with new cells including the ACL data
    for (Map.Entry<byte[], List<Cell>> e : familyMap.entrySet()) {
      List<Cell> newCells = Lists.newArrayList();
      for (Cell c : e.getValue()) {
        assert c instanceof ExtendedCell;
        ExtendedCell cell = (ExtendedCell) c;
        // Prepend the supplied perms in a new ACL tag to an update list of tags for the cell
        List<Tag> tags = new ArrayList<>();
        tags.add(new ArrayBackedTag(PermissionStorage.ACL_TAG_TYPE, perms));
        Iterator<Tag> tagIterator = PrivateCellUtil.tagsIterator(cell);
        while (tagIterator.hasNext()) {
          tags.add(tagIterator.next());
        }
        newCells.add(PrivateCellUtil.createCell(cell, tags));
      }
      // This is supposed to be safe, won't CME
      e.setValue(newCells);
    }
  }
Determine if cell ACLs covered by the operation grant access. This is expensive.
@return false if cell ACLs failed to grant access, true otherwise
hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java