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

Manipulação de bits e recuperação do MySQL em PHP


Você já pensou em armazenar suas permissões como um número inteiro, com cada permissão um valor binário (ou seja, 1,2,4,8,16), e você soma todas as suas permissões. Você pode então verificar se eles têm uma determinada permissão usando o operador &

Igual a:
if ($accessLevel & $userPermissions) 

Isso lhe dá um sistema muito mais útil do que armazenar um número binário

Conforme solicitado nos comentários, um pouco mais de informação.

Você configuraria sua tabela de usuários para ter um campo inteiro para armazenar suas permissões. Cada um dos seus níveis de permissão teria um múltiplo binário (não sei o termo correto aqui) que corresponde ao valor de um bit binário. Por exemplo:
Read - 1
Edit - 2
Create - 4
Delete - 8

E assim sucessivamente, quantas forem necessárias. Para criar um nível de permissão de usuários, você OU os valores juntos. Vamos supor que os níveis acima sejam armazenados em uma classe como valores estáticos, você o criaria assim:
$newUser->Permissions = Permissions::Read | Permissions::Create;

O que lhe dá um usuário que pode ler e criar, mas não editar ou excluir.

Para verificar se um usuário tem permissão para realizar uma ação, você usa AND:
if ($newUser->Permissions & Permissions::Read) {
    echo 'You can do this!';
}  else {
    echo 'You can't this!';
}

Isso fornece um campo de banco de dados simples, que é tão extensível quanto você realmente precisa e verificações e alterações simples de usar. Você também pode considerar armazenar níveis de permissão em outra tabela, etc., dependendo de qual nível de personalização você pode precisar.