user_table
id, etc
permission table
id, user_id, permission_type
dengan struktur ini, setiap pengguna dapat memiliki beberapa jenis izin yang terkait dengan akun mereka, satu untuk setiap rangkaian fitur yang dapat memiliki akses ke. Anda tidak perlu mengubah struktur tabel untuk menambahkan jenis izin baru.
untuk melangkah lebih jauh, Anda dapat membuat setiap jenis izin menjadi bilangan biner. dengan cara ini Anda dapat membuat satu set izin diwakili oleh satu bilangan bulat dengan menggunakan operator bitwise.
misalnya jika Anda memiliki konstanta
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
anda dapat menggabungkan nilai-nilai ini menjadi satu bilangan bulat menggunakan operator bitwise "|"
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
kemudian untuk memeriksa apakah mereka memiliki izin khusus, gunakan operator bitwise "&"
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
jika Anda melakukannya, Anda hanya memerlukan satu data db untuk setiap set izin.