Sorry for lack of updates. I've been spread thin and hit a logical error a few days ago that halted progress.
I've finally sat down and thought out how I want to refactor our permission system to work with 8ch. I was originally modeling the permission system after XenForo and other forums, but the issues come from the Board Owner.
Currently, the software uses a "Yes / Inherit / Never" permission mask. By default, all permissions are Inherit (soft no). As permissions are given at different levels, they allow the user to do more. If a permission mask has a "Never" permission, it overrides all existing and future "Yes" permissions as the mask is compiled.
If the user was "Never" allowed to do something, a Board Owner could tell a Global Administrator that he cannot post on his board. To remedy this, I figured I was going to remove the "Never" permission and only allow additive "Yes" permissions, but that would mean we would have to consider Tor users completely separate from Anonymous users and build the default permission layer twice just to revoke the "Upload an image" permission. This would also mean that board owners couldn't revoke permission to use the Name field, that would have to be mitigated to a board option, which defeats the entire purpose of a staggered permission layer.
I've settled on changing "Yes / Inherit / Never" to "Yes / Inherit / Revoke", and adding weights to each layer of the permission mask. The "Revoke" setting would, instead of never allowing a permission to be set, instead revoke "Yes" permissions given on lower levels.
All users inherit the Anonymous permission mask, and users on Tor inherit the Tor permission mask.
00g - Anonymous
10g - Tor
20g - Janitor
30g - Owner
40g - Moderator
50g - Administrator
If a mask is made custom for a board, it's weight would be +5g. So, for instance, lets say we made this board where namefagging is disabled and tor images are enabled for /pol/.
00g - Anonymous (Global): ALLOW names, ALLOW images.
05g - Anonymous (/pol/): REVOKE names, INHERIT images (inherits allow).
10g - Tor (Global): INHERIT names (inherits deny), REVOKE images.
15g - Tor (/pol/): INHERIT names (inherits deny), ALLOW images (sets on top previous revoke).
20g - Janitor (Global): ALLOW names, ALLOW images.
And this permission for allowing board permissions is constantly reset from this point up so that staff can always post names and images.
I think this is the best possible system for giving granularity to the permission system as well as protecting the staff's ability to do their job. I'm going to write a database upgrade and begin retooling the permission system.
Post last edited at