Here are some thoughts on implementation.

  *  Have "can edit on web" permission flag.
  *  Have special per-user staging area for edits from web, which records modifications to files.
  *  Once file(s) are edited, they're put into the user's staging area.
  *  User can commit his staging area if he has commit permission.
  *  Users without commit permissions, but with "can edit on web" permissions, can create tickets with modifications from their staging area or download their modifications as a patch.

This won't work for anonymous or other "group" users. For those Fossil can have per-file editing without staging area. Also, not sure how to handle merges.