Hướng dẫn php bitfield - php bitfield
Kỹ thuật bit field trong phân quyền Bài viết này sẽ hướng dẫn cho các bạn áp dụng kỹ thuật bit field trong phân quyền chức năng ứng dụng. Mở đầu Ý tưởng là dùng các bit để lưu trạng thái, hoặc phân quyền trong chương trình. Với cách lưu này thì mỗi trạng thái chỉ tốn 1 bit để lưu trữ. Vi dụ ta lưu 4 quyền view/add/edit/delete theo một dãy 0-1, được lưu trong một biến kiểu int. (Với kiểu int32 ta có thể lưu tối đa 32 trạng thái). Full control (15):
Tương ứng, ta lưu các quyền với các giá trị như sau:
1 < 0 Decimal Bây giờ ta có các quyền được thể hiện như sau: view = 1 view + add = 1 + 2 = 3 view + add + edit = 1 + 2 + 4 = 7 view + add + edit + delete = 1 + 2 + 4 + 8 = 15 Chẳng hạn khi cần kiểm tra user có quyền edit hay không, ta chỉ cần lấy quyền của user và AND với giá trị edit (4) nếu nó khác 0 (và bằng chính quyền đó, trong trường hơp edit là 4) là user có quyền thực hiện quyền này.
Base Binary Bitwise 1 < 3
1 < 2 1 < 1 1 < 0 Decimal Bây giờ ta có các quyền được thể hiện như sau: view = 1 view + add = 1 + 2 = 3 view + add + edit = 1 + 2 + 4 = 7 view + add + edit + delete = 1 + 2 + 4 + 8 = 15 Chẳng hạn khi cần kiểm tra user có quyền edit hay không, ta chỉ cần lấy quyền của user và AND với giá trị edit (4) nếu nó khác 0 (và bằng chính quyền đó, trong trường hơp edit là 4) là user có quyền thực hiện quyền này. Bảng các quyền tương ứng với cơ số 10: Edit-Add-View (7)
Ví dụ Giả sử module tin tức trong ứng dụng của mình có 4 chức năng:
- Đọc tin - Thêm tin - Xóa tin - Sửa tin Mình cần phân quyền cho 2 nhóm: admin và editor
Lưu vào cơ sở dữ liệu:
Xuất giá trị:
Xuất giá trị: [Nghean-Aptech st] Các tin mới hơn: Hướng dẫn tích hợp giao diện trang quản trị SB Admin 2 vào Laravel 5.8. Hướng dẫn tích hợp Google ReCaptcha v2 vào Laravel bằng curl. Học lập trình React JS trong vòng 5 phút. Sử dụng trình soạn thảo CKeditor tích hợp CKFinder với Laravel. Hướng dẫn cài đặt Apache, PHP, MySQL, PHPMyAdmin trên Windows 10 và cấu hình SendMail. Các tin cũ hơn: Lựa chọn mô hình lập trình ASP.NET. Giới thiệu nền tảng Windows Azure. So sánh công nghệ Java và .Net. Tại sao cần tránh viết SQL code trong ứng dụng?. |