After 4 months of development, and several weeks of teasers and hype, the old server is out and the new back-end is in.
The new architecture brings a host of major improvements:
We now have a really solid base to build more features on top of, the workflow has never been faster and iterating on Revolt is getting better by the day. I can only hope that this will help us develop and ship more features faster than ever before.
Stay Tuned ๐
The old permission system was in dire need of a rework, it was pretty much just a early solution.
It had some really serious issues:
This was definitely a blocking factor for communities to adopt the platform, because really nobody should be expected to operate a community with such conditions. This update is in part meant to address this problem.
Our system departs slightly from more conventional permissions systems used on other platforms but hopefully it'll be worth it for the finer control you have over your roles and channels.
Roles are currently given an absolute ranking, with smaller numbers taking precedence or otherwise have more priority over greater numbers. For example, -5 will win out on 5. We hope to build a more intuitive UI in the future.
To calculate a user's permissions in a server:
Default
role.In essence, this means you can do stuff like create a "muted" or "restricted" role which removes permissions granted earlier down the role hierarchy. For example, the user below has a role which restricts their ability to view channels:
Then to calculate a user's permissions in a channel:
Default
role on channel.Default
role on channel.For a flow chart and more information, please see the developer documentation.
Let's discuss a bit about how the entire architecture has changed...
models
: each model is defined separately from any logictraits
: each model is given a set of traits that need to be implemented by some databaseimpl
: implementation layer for databases (we currently support a mock database and MongoDB)generic
: additional generic methods which use the traits to build more complex queries and to generate events