user_table
id, etc
permission table
id, user_id, permission_type
với cấu trúc này, mỗi người dùng có thể có một số loại quyền được liên kết với tài khoản của họ, một loại cho mỗi bộ tính năng mà họ có thể có quyền truy cập vào. bạn sẽ không bao giờ cần thay đổi cấu trúc bảng để thêm các loại quyền mới.
để tiến thêm một bước nữa, bạn có thể đặt mỗi loại quyền là một số nhị phân. theo cách này, bạn có thể làm cho một tập hợp các quyền được biểu diễn bằng một số nguyên bằng cách sử dụng các toán tử bitwise.
chẳng hạn nếu bạn có các hằng số
PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
bạn có thể kết hợp các giá trị này thành một số nguyên bằng cách sử dụng toán tử bitwise "|"
(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
sau đó để kiểm tra xem họ có quyền cụ thể hay không, hãy sử dụng toán tử bitwise "&"
($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
nếu bạn đã làm điều đó, bạn sẽ chỉ cần một bản ghi db cho mỗi bộ quyền.