¿Cuál es la mejor manera de crear un sistema de permisos robusto para una aplicación web para que solo los usuarios con ciertos roles puedan acceder a vistas y datos particulares?

1. Backend
Puede utilizar una programación orientada a aspectos para factorizar el modelo de permisos como una preocupación transversal. Sentados frente a la lógica de su negocio habría interceptores que permiten solicitudes legítimas o devuelven errores de autorización apropiados para lo ilegal. Muchos marcos web admiten esto y también puede implementar el suyo si los disponibles para su plataforma no son lo suficientemente flexibles como para satisfacer sus necesidades.

Ejemplo de Java:

@Stakeholders({DEAN, HEAD_OF_DEPT, LEVEL_ADVISER})
public List getGraduatingList(String academicSession) {
...
}

2. Frontend
Probablemente necesite hacer vistas personalizadas para la interfaz. Esto realmente depende de la aplicación. El flujo de actividades que ejecutará un gerente de ventas en una aplicación empresarial es diferente de las que haría un supervisor de línea de producción.
Sin embargo, para los sistemas que tienen un modelo de permiso jerárquico (por ejemplo, un oficial de nivel 7 puede ver / hacer todo lo que los oficiales de nivel 1 a 6 pueden ver / hacer), puede vincular la visibilidad de los widgets de la interfaz de usuario a las respuestas de la API al obtener datos para procesar en el puntos de vista. Esto supone que su interfaz de usuario está completamente desacoplada de su backend y solo está integrada a través de una API.

Ejemplo de Angular.js:

...

Sin conocer la naturaleza de su aplicación, puede ser difícil hacer un buen juicio.

Lol en el uso de tokens web json. Puede aplicarles subvenciones y luego solo necesita autenticar el token y la subvención. No se requieren cosas locas de Db.