Implement Permissions checks into Core

I may have missed some spots...
The other places where we use IDs are database reference fields that get resolved into actual objects any time we use them, right? Whereas my impression is that permission strings are going to be used by humans at least a fair bit. If so, I think the app short is nicer.