Hỏi về cách 1 trang web phân quyền người dùng

Em mới học về làm web với Django nên cũng chưa biết nhiều. Em có 1 thắc mắc là các trang web quản lý phân quyền nội dung cho người dùng như thế nào? Mong mọi người giải thích sơ qua về cơ chế cho em hiểu. VD có 1 post A nào đó không cho user B truy cập, nhưng nếu user B có link của nội dung đó, thì web site sẽ xử lý như thế nào? Em xin cám ơn mọi người.

thì khi gửi request của người B, web sẽ gửi kèm thông tin của người B qua cookie, server xác nhận quyền của ông B không được xem link đó nên sẽ trả ra một thứ khác , có thể là lỗi hoặc một trang 404 notfound chẳng hạn

3 Likes

Bạn làm phân quyền theo kiểu ma trận, hoặc học hỏi cơ chế của phần quyền file trên Linux. Một ví dụ nhỏ:

Có các quyền sau:

  • Quản trị (có toàn quyền: thêm, xóa, sửa bài của mình và của người khác)
  • Biên tập viên (có các quyền: thêm, xóa, sửa bài của mình, sửa bài của người khác)
  • Người dùng thường (có các quyền: thêm, xóa, sửa bài của mình, không làm gì được với bài người khác).

Trong table chứa thông tin người dùng, ta sẽ có cột phân quyền và ta dùng một con số để chỉ định quyền hoặc ta làm cách thô thiển nhất là ta chơi kiểu chuỗi và tách chuỗi để xử lý:

THEM_XOA_SUA_THEM_XOA_SUA_THEM_XOA_SUA : cái này dành cho quản trị.
NA_NA_NA_THEM_XOA_SUA_NA_NA_SUA : cái này dành cho biên tập viên
NA_NA_NA_NA_NA_NA_THEM_XOA_SUA : cái này dành cho người dùng thường.

Bạn nhìn nhận thấy có tổng 9 quyền cho một người dùng, 3 vị trí đầu dành cho quản trị, 3 vị trí tiếp theo dành cho biên tập viên, 3 vị trí cuối dùng cho người dùng thường.

Mở rộng vấn đề: nếu bạn có thêm người dùng không thuộc 3 nhóm kia, bạn có thể căn cứ vào đó để cấp quyền cho họ bằng cách “bật vị trí” trong cái chuỗi 9 giá trị kia. NA nghĩa là không có quyền.

Nếu đọc những gì mình nói hông hiểu thì hãy hỏi để người khác hiểu giải thích cho bạn.

4 Likes

Về việc phân quyền, thì thường các framework đều đã có thiết kế sẵn, bạn hãy tìm hiểu cách sử dụng.
Mình search với từ khóa “authentication django” thì ra khá nhiều kết quả
https://docs.djangoproject.com/en/3.0/topics/auth/default/

2 Likes

Phân quyền thì phải tìm từ khoá Authorization chứ bạn

5 Likes

dựa vào nhiều thứ, trong db sẽ có các cấp độ cho các user khác nhau, bên trong sẽ check login và check current user, nếu đúng thì tiếp còn sai thì văng ra exception thôi

1 Like

Em xin cám ơn mọi người. Em sẽ phải học thêm nhiều thứ nữa. Điều anh VoThin chia sẻ thật sự quá trừu tượng với mình.

Thực ra có một cách nữa mình thấy khá hay:
Cách này là ứng dụng bitwise vào, đảm bảo cực nhanh.

Giả sử bạn define list quyền ra với các số theo cơ số 2:
1: Viewable
2: Editable
4: Can Delete
8: …

Sau đó column permission chỉ cần set là int, rồi tại code check sẽ dùng bitwise | để check true/false
Lúc set thì dùng bitwise & để thêm quyền…

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?