Sep
6

Kỹ thuật “bit field” trong phân quyền

Author admin    Category Chia sẻ, Kinh nghiệm, PHP     Tags

Có thể nhiều bạn đã biết về kỹ thuật này, tuy nhiên, mình vẫn viết bài này, hi vọng các bạn chưa biết có thêm lựa chọn khi làm chức năng phân quyền trong các ứng dụng

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

Áp dụng kỹ thuật bit field, mình sẽ cho mỗi chức năng của module tin tức 1 con số đại diện, và lưu thành mảng

$bitfields_news = array(
    'canview' => 1,
    'canadd' => 2,
    'canedit' => 4,
    'candelete' => 8
);

Các bạn để ý các con số đại diện, tăng theo qui luật, số sau = số trước x 2 (bắt đầu từ 1)

Trong table groups, mình có cột news_permission, cột này sẽ cho biết admin hay editor có những quyền gì.

Giả sử admin có full quyền thì cột news_permission sẽ có giá trị:

1 + 2 + 4 + 8 = 15

Giả sử editor chỉ có quyền xem và sửa thì cột news_permission sẽ có giá trị:

1 + 4 = 5

Bảng groups sẽ như sau:

id_____name______news_permission
1_____admin______15
2_____editor______5

Bây giờ, ta sẽ xét quyền. Khi user nhấn delete một mẩu tin nào đó, ta sẽ check như sau:

if ($users['Group']['news_permission'] & 8) {
    // cho phep xoa
}

Chú ý phép toán &

Các bạn có thể dùng hàm decbin() để đổi sang nhị phân rồi đối chiếu

decbin(15) = 1111
decbin(8) = 1000

Mã nguồn forum VBB sử dụng kỹ thuật này rất hiệu quả

4 Comments to “Kỹ thuật “bit field” trong phân quyền”

  • Mai Thu Thuy 01/10/2011 at 12:39 pm

    Cam on admin da share, ki thuat nay minh su dung cach day 5 nam. Giam thieu so dong code di rat nhieu

  • hung nguyen 28/10/2011 at 9:55 pm

    hi !
    Ý tượng hay, vậy bạn có thể share code được không vây?

  • admin 14/11/2011 at 4:46 pm

    Cách làm đã rất rõ ràng rồi, giờ chỉ việc áp dụng thôi, code chỉ là hiện thực hóa và tùy thuộc ứng dụng của bạn, mình cũng chẳng biết share code gì!

  • tuyền 19/11/2011 at 5:09 pm

    Mình có file hoadons_controller.php như sau :
    [PHP]Hoadon->query($sql);
    $this->set(“datas”,$datas);
    }
    }
    ?>[/PHP]
    mình không biết biểu diễn câu lệnh sql này trong cakephp thế nào lên đành phải làm cách này.câu lệnh sql này mình sử dụng trong phpmyadmin vẫn cho kết quả đúng.Ai viết dc câu lệnh sql này trong cakephp giúp với
    và file element/sp_ban_nhieu.ctp như sau:
    [PHP]
    requestAction(“/hoadons/sp_ban_nhieu”);
    echo “”;
    print_r($ids);
    echo “”;
    if($ids!=null){
    echo “có mảng ids”;
    }else{
    echo “không có gì”;
    }
    ?>[/PHP]
    Nhưng kết quả trả về là không có gì cả.
    Đang cần gấp a em giúp với.Thanks

Post comment

Follow us on Twitter! Follow us on Twitter!
Diễn đàn CakePHP cho người Việt Nam

Bài viết mới

Thảo luận mới

TAG

Calendar

September 2011
M T W T F S S
« Jul    
 1234
567891011
12131415161718
19202122232425
2627282930  

Lưu trữ

Blogroll

Thống kê

8 khách, 1 Bot