Transaction line custom fields don’t use the same “Transaction Body Field” permission. To create or edit them you need to give the role Custom Record Entries (for custom segment fields) and more importantly Custom Fields → Transaction Line Fields permission. Once that’s on the role, the user can create and edit line-level custom fields, while Transaction Body Fields permission only covers header-level fields.