user_table
id, etc
permission table
id, user_id, permission_type
с тази структура всеки потребител може да има няколко типа разрешения, свързани с неговия акаунт, по едно за всеки набор от функции, които може има достъп до. никога няма да е необходимо да променяте структурата на таблицата, за да добавите нови типове разрешения.
за да направите това още една стъпка, можете да направите всеки тип разрешение двоично число. по този начин можете да направите набор от разрешения да бъде представен с едно цяло число, като използвате побитови оператори.
например ако сте имали константи
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
можете да комбинирате тези стойности в едно цяло число, като използвате побитов оператор "|"
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
след това, за да проверите дали имат конкретно разрешение, използвайте побитовия оператор "&"
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
ако го направите, ще ви трябва само един db запис за всеки набор от разрешения.