user_table
id, etc
permission table
id, user_id, permission_type
com essa estrutura, cada usuário poderia ter vários tipos de permissão associados à sua conta, um para cada conjunto de recursos que poderiam Ter acesso à. você nunca precisaria alterar a estrutura da tabela para adicionar novos tipos de permissões.
para dar um passo adiante, você pode transformar cada tipo de permissão em um número binário. dessa forma, você pode fazer com que um conjunto de permissões seja representado por um inteiro usando operadores bit a bit.
por exemplo, se você tivesse as constantes
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
você pode combinar esses valores em um inteiro usando um operador bit a bit "|"
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
em seguida, para verificar se eles têm uma permissão específica, use o operador bit a bit "&"
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
se você fizer isso, precisará apenas de um registro db para cada conjunto de permissões.