Well, JeffM explained to me that permissions shouldn’t be an issue for my plugin at all, but it turns out that at least one of my error checks was checking for a status that wasn’t useful, which caused the false alarm. There was also a bit of confusion around the type of markup I was using (thanks blast007). I still wasn’t able to find why nothing is being saved to the database, but at least everything is being displayed correctly now. I’ll continue to pursue this problem, after which I should be able to test kicks/bans in conjunction with the client.