I am also working on a system like this. Well, revamping the one I already wrote. So I do have some opinions on what I want, yes. I'm not trying to derail your effort, and will contribute any ideas and code where I can!
So.
Granular permissions, to me, mean that different 'queues' or 'buckets' or whatever you want to call them can have different sets of permissions settable easily (without coding up function attributes for example), and apply those permissions to IC or OOC groups or individuals.
- Staff (I still prefer that this NOT be coded against a bit or flag, maintain a list or attribute)
- IC Groups (Sabbat, Camarilla, The 'Clickers' Cabal, Law Enforcement)
- IC 'races' (Vampires, Weres, Autobots, Unapproved Characters, etc)
- Public
- Invite-only (essentially, someone has to be added manually to the record)
These can be applied to various 'roles', and roles can have multiple entries. If you appear in any group, or are mentioned by dbref, in any 'role', you have those privs.
- Read
- Write/Edit (can edit the body/title of the original submission)
- Contribute/Comment
- Admin (can move, close, reassign)
- Inviter (can add more Readers or Contributors)
In a lot of cases, I would guess that the system would attribute the record originator to be #1, #2, #3 and #5, and that Staff would be all plus #4. In some cases, however, you might want to set up Groups to be overall Roles in a queue. So your IC/PC Prince could automatically have Roles #1, #3 and #5 in the Camarilla queue, but could not Admin the record nor Edit it. This would allow your IC PCs to answer a lot of items in the queue, especially for IC things like meeting requests, IC information requests, and so forth, and Staff don't need to be involved. (Again, this is for games structured like this.)
This allows you to open up the system so that Roles != Bits. Storytellers would not need a Wizard bit to simply admin a queue. Just build a group as you mentioned, and assign the role to the group.
I can show you what I mean on Shards, if you want to poke. I've built @Groups as an underlying system to the entire game, and everything I am coding is coded against that idea. So far, my BB system uses this approach, and the very similar queue/request system will, also.