Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Implementando permissões com base na reputação

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.