La méthode "à l'ancienne" peut fonctionner, mais ça demande quand même de surcoucher pas mal de choses, puisqu'on ne peut pas utiliser de prexif, ni d'avoir un réel contrôle là dessus.
L'idée c'est de faire un enum pour les autorisations :
- 0 : super administrateur
- 1 : administrateur
- 2 : modérateur
- 3 : membre premium
- 4 : membre classique
- 5 : nouveau membre
- 6 : esclave
etc... A adapter selon tes besoins.
L'idée, c'est que le 0, c'est Dieu, y a rien au dessus. Et plus le chiffre augmente, plus les permissions sont réduites.
Dans ton cas, pour l'avoir mis en place il y a quelques années sur un projet à la logique similaire, le principe revient à dire :
- tout le monde peut poster
- un post est passé à sa création en statut created, sauf si l'utilisateur est super-administrateur
- pour qu'un post soit passé en accepted, il faut qu'un utilisateur d'un niveau hiérarchique supérieur (donc < à celui de l'auteur) le valide
- tu n'affiches que les posts accepted
Et le tour est joué.
Mais contrairement aux ACL, c'est pas hyper maintenable puisque tout est codé en dur, c'est pas accessible dans l'admin, et c'est pas réglage controller par controller, fonction par fonction. Mais ça peut faire l'affaire.