Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Manipulacja bitami i pobieranie MySQL w PHP

Czy rozważałeś przechowywanie swoich uprawnień jako liczby całkowitej, przy czym każde uprawnienie ma wartość binarną (tj. 1,2,4,8,16) i dodajesz wszystkie ich uprawnienia. Następnie możesz sprawdzić, czy mają dane uprawnienia, używając operatora &

Tak:

if ($accessLevel & $userPermissions) 

To daje znacznie bardziej użyteczny system niż przechowywanie liczby binarnej

Zgodnie z prośbą w komentarzach, trochę więcej informacji.

Możesz skonfigurować tabelę użytkowników, aby zawierała pole liczb całkowitych do przechowywania twoich uprawnień. Każdy z twoich poziomów uprawnień miałby binarną wielokrotność (nie znam tutaj poprawnego terminu), która odpowiada wartości binarnego bitu. Na przykład:

Read - 1
Edit - 2
Create - 4
Delete - 8

I tak dalej, ile potrzeba. Aby utworzyć poziom uprawnień użytkowników, LUB wartości razem. Załóżmy, że powyższe poziomy są przechowywane w klasie jako wartości statyczne, utworzysz to w ten sposób:

$newUser->Permissions = Permissions::Read | Permissions::Create;

Co daje Ci użytkownika, który może czytać i tworzyć, ale nie może edytować ani usuwać.

Aby sprawdzić, czy użytkownik ma uprawnienia do wykonania czynności, użyj AND:

if ($newUser->Permissions & Permissions::Read) {
    echo 'You can do this!';
}  else {
    echo 'You can't this!';
}

Daje to jedno proste pole bazy danych, które jest tak rozszerzalne, jak naprawdę potrzebujesz, oraz proste w użyciu kontrole i zmiany. Możesz również rozważyć przechowywanie poziomów uprawnień w innej tabeli itp., w zależności od tego, jakiego poziomu dostosowania możesz potrzebować.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Howto:Wyczyść silnik pamięci masowej mysql InnoDB?

  2. Dane binarne nie są prawidłowo przechowywane w MySQL

  3. Czy INSERT IGNORE blokuje tabelę, nawet jeśli ignoruje wstawianie?

  4. MySQL odrzuca kolumnę z ON DELETE SET NULL, ale nie ON DELETE CASCADE

  5. Rodzic / Dziecko w tym samym stole