Tôi đang thiết kế ủy quyền cho một ứng dụng DRF. Tôi cần phải sử dụng vai trò, không chỉ cho phép.Thiết kế ủy quyền dựa trên vai trò Django Rest Framework
Tôi có một mô hình (ví dụ: project
) trong đó tôi có một số thông tin (ví dụ: tên, mô tả) có thể được sửa đổi bởi một số vai trò (ví dụ: admin
). Nhưng đồng thời có các vai trò khác (ví dụ: worker
) không được sửa đổi thông tin đó bên trong mô hình đó nhưng vẫn có thể sửa đổi một số thông tin khác (ví dụ: ngày ban đầu và ngày cuối cùng).
Tôi đã nghĩ hai giải pháp cho vấn đề này. Đầu tiên là đọc yêu cầu HTTP được gửi và xác định các hành động sẽ được thực hiện tùy thuộc vào yêu cầu. Điều này có nghĩa là mỗi khi một trường mới được thêm vào mô hình, tôi sẽ phải sửa đổi logic này. Điều này nghe có vẻ khó khăn để duy trì, là lỗi dễ bị và có thể giới thiệu các lỗ hổng.
Mặt khác, tôi đã nghĩ rằng tôi có thể chia mô hình thành hai mô hình khác nhau. Một trong số chúng chứa dữ liệu chỉ có một vai trò (admin
) có thể sửa đổi và một dữ liệu khác xác định dữ liệu khác có thể được sửa đổi bởi cả hai vai trò (admin
, worker
). Bằng cách này, tôi sẽ không phải phân tích cú pháp yêu cầu HTTP, bởi vì nếu tôi nhận được yêu cầu POST/PUT ảnh hưởng đến mô hình đầu tiên và người dùng có vai trò công nhân, tôi có thể trực tiếp từ chối nó.
Tình huống này xảy ra với nhiều mô hình.
Tôi muốn biết nếu có cách mặc định để đi hoặc nếu tôi đang phát minh lại bánh xe. Tôi nghĩ rằng tình trạng này phải thực sự phổ biến. Ví dụ, tôi có thể nghĩ về một dự án git trong đó một số người dùng có quyền truy cập để làm một việc bên trong một dự án chứ không phải một thứ khác.
ghi chú bổ sung (thông tin phản hồi sẽ được thực sự đánh giá cao):
tôi có lẽ hầu hết sẽ sử dụng mô-đun django-role-permissions để thực hiện vai trò và quyền. Tôi không thể sử dụng django được xây dựng trong nhóm bởi vì, mặc dù bạn có thể thêm quyền cho họ, tôi sẽ sử dụng chúng để nhóm người dùng (mà không có bất cứ điều gì để làm với vai trò).
Tôi sẽ tạo mối quan hệ giữa vai trò và quyền (quyền dựa trên chuỗi, chẳng hạn như
create_project
,modify_project_description
) trong tệp quyền.Khi nhận được từng yêu cầu, tôi sẽ kiểm tra vai trò nào có quyền thực hiện tác vụ đó và kiểm tra xem người dùng có thuộc bất kỳ vai trò nào hay không (điều hành dựa trên hoạt động, có nghĩa là ở điểm cuối tôi sẽ kiểm tra hoạt động/hành động của vai trò).
Bạn xứng đáng nhận được ưu đãi vì tôi sẽ thực hiện mọi thứ bạn đề cập (ngoài mô hình proxy). – newlog