¿Cuál es la mejor manera de administrar permisos para una aplicación web: máscara de bits o tabla de base de datos?

Estoy considerando la mejor manera de diseñar un sistema de permisos para una aplicación web "admin". Es probable que la aplicación tenga muchos usuarios, a cada uno de los cuales se le podría asignar un determinado rol; A algunos de estos usuarios se les podría permitir realizar tareas específicas fuera del rol.

Se me ocurren dos formas de diseñar esto: una, con una tabla de "permisos" con una fila para cada usuario, y columnas booleanas, una para cada tarea, que les asigna permisos para realizar esas tareas. Me gusta esto:

User ID          Manage Users     Manage Products     Manage Promotions     Manage Orders
1                true             true                true                  true
2                false            true                true                  true
3                false            false               false                 true

Otra forma en la que pensé fue en usar una máscara de bits para almacenar estos permisos de usuario. Esto limitaría la cantidad de tareas que podrían administrarse a 31 para un entero con signo de 32 bits, pero en la práctica es poco probable que tengamos más de 31 tareas específicas que un usuario pueda realizar. De esta manera, el esquema de la base de datos sería más simple y no tendríamos que cambiar la estructura de la tabla cada vez que agregáramos una nueva tarea que necesitaría control de acceso. Me gusta esto:

User ID          Permissions (8-bit mask), would be ints in table
1                00001111
2                00000111
3                00000001

¿Qué mecanismos han utilizado típicamente las personas aquí y por qué?

¡Gracias!

Respuestas a la pregunta(8)

Su respuesta a la pregunta