So I have sort of a hacky way to accomplish what I want.
To save anybody who is facing this issue the time / struggle… Strapi just doesn’t let you do what I am trying to do above here. Don’t research it… you’ll just waste your time and get angry. You can’t use the built in created_by field so stop trying.
The solution is to add your own createdBy editedBy or editedAt fields to the model and update them manually in every controller action that touches your records. Then in your controller you can look at the ctx.state.user to find IDs for assignment that will work. Then update your list/find controller actions to ignore any URL params, and set the createdBy from the ctx.state.user.id value you can grab.
<frustrated rant>
This is by far the worst part of Strapi I’ve encountered yet. Its the type of thing that will cause people to be discouraged from using the platform because what I’d consider basic functionality is totally lacking. I am trying to channel my frustration into constructive criticism… I hope someone reads these posts and updates the holes in the documentation or writes a blog post about “how to deal with the fact that your admin users and API users are two different sets”.
I really… REALLY wish there was a way to undo the separation of admin users and web users. Especially with the great ACL admin UI that Strapi has it takes a great feature and completely ruins it.
</rant>