In my system, the post id from URL is a string.

But $this->field('id',..) returns integer ID. E.g. '6' === 6, thus isOwnedBy() always return false. Converting the parameter to integer fixes this.