2008-10-23 33 views
12

Tôi đã khám phá các chi tiết của Django trong khoảng một tuần nay và giống như những gì tôi thấy. Tuy nhiên tôi đã đi vào một số .. tiêu cực liên quan đến kiểm soát hạt mịn quyền truy cập vào giao diện CRUD.Django sẽ là một lựa chọn tốt cho một quyền dựa trên ứng dụng web?

Những gì tôi đang viết là ứng dụng web quản lý khách hàng nội bộ. Tổ chức này có khoảng 6 tầng và tôi cần hạn chế quyền truy cập vào các nhóm khách hàng dựa trên các tầng. Liên tục mở rộng. Tôi có một ý tưởng khá tốt về cách tôi sẽ làm điều này, nhưng tôi không chắc chắn liệu tôi có thể tích hợp nó vào giao diện quản trị được dựng sẵn hay không.

Tôi đã hoàn toàn không phát triển Django nếu không tôi có thể có ý tưởng tốt hơn về việc liệu điều này có hiệu quả hay không. Tôi có lẽ sẽ không sử dụng Django nếu giao diện quản trị được tạo ra sẽ là vô ích cho dự án này - nhưng như tôi đã nói, có một sự phụ thuộc nặng nề vào các quyền tùy chỉnh chi tiết.

Django có cho phép tôi tạo quyền/quy tắc tùy chỉnh và tích hợp nó liền mạch vào giao diện CRUD quản trị không?

Cập nhật Một: Tôi muốn sử dụng ứng dụng quản trị để giảm thiểu sự lặp lại của việc tạo ra các giao diện CRUD, vì vậy có, tôi cho rằng nó phải có.

Cập nhật thứ hai:

tôi muốn mô tả các điều khoản cần thiết cho dự án này.

Khách hàng có thể thuộc một hoặc nhiều 'cửa hàng'. Nhân viên toàn thời gian chỉ có thể chỉnh sửa khách hàng tại cửa hàng của họ (ngay cả khi họ thuộc về một cửa hàng khác). Tuy nhiên, họ không thể xem/chỉnh sửa khách hàng tại cửa hàng khác. Người bình thường chỉ có thể xem khách hàng dựa trên cửa hàng họ được phân phối (hoặc nếu người dùng thường đăng nhập là người dùng cửa hàng - nhiều khả năng).

Quản lý ở trên chúng cần có thể xem tất cả nhân viên cho các cửa hàng mà họ quản lý, không có gì khác.

Quản lý cấp cao sẽ có thể chỉnh sửa TẤT CẢ nhân viên và cấp quyền dưới đây.

Sau khi đọc tài liệu django, nó cho biết bạn không thể (autmoatically) thiết lập quyền cho một tập hợp con của một nhóm. Chỉ toàn bộ nhóm. Có đủ dễ dàng để giả lập quyền của riêng bạn cho mục đích này không?

Trả lời

7

Nếu tôi đọc yêu cầu cập nhật của bạn một cách chính xác, tôi không nghĩ rằng hệ thống xác thực hiện có của Django sẽ đủ . Có vẻ như bạn cần một hệ thống ACL đầy đủ.

Chủ đề này đã xuất hiện một số lần. Hãy thử googling trên django + acl.

Lấy mẫu ngẫu nhiên ...

Dự án Summer of Code cách đây vài năm, nhưng tôi không chắc họ đã đến đâu. Xem http://code.djangoproject.com/wiki/GenericAuthorization

Có một vé tươi tại djngoproject.org đó có thể là thú vị:

Có một số mã thú vị Snips trên dumpz.org:

... nhưng có zero tài liệu.

Chúc may mắn!

3

ModelAdmin đối tượng có has_add_permission, has_change_permission, has_delete_permissionqueryset phương pháp có thể được sử dụng để thực thi các điều khoản xung quanh những gì người sử dụng đăng nhập có thể xem và sửa đổi - bạn có thể tạo một lớp con trong đó sử dụng chúng để thực thi bất cứ điều gì cho phép bạn muốn thực hiện và đăng ký tất cả các mô hình của bạn với ứng dụng admin bằng cách sử dụng lớp con của bạn.

Tuy nhiên, tất cả đều phụ thuộc chính xác cách hệ thống quyền của bạn hoạt động - các yêu cầu chính xác rơi ra khỏi các quyền hạn chi tiết của bạn là gì? Bạn càng di chuyển ra khỏi ứng dụng admin được thiết kế để thực hiện, công việc càng nhiều, nhưng có rất nhiều móc trong đó bạn có thể sử dụng để thực hiện các yêu cầu tùy chỉnh của mình. Dưới đây là một số blog post from Luke Plant cung cấp các ví dụ về một số điều chỉnh mà bạn có thể thực hiện mà không phải đào sâu.

Hoàn toàn có phải dựa trên ứng dụng admin không?Generic viewsModelForms có thể xử lý rất nhiều bit tẻ nhạt liên quan đến việc triển khai CRUD, vì vậy be wary bị treo lên tùy chỉnh admin - nó gần như là truyền thống Django để bắt đầu bằng cách treo ứng dụng admin và những gì có thể và có thể 't do, ban đầu nghĩ rằng bạn sẽ không bao giờ phải viết lại bất kỳ mã nào;)

+0

Rất nhiều công việc đã được thực hiện đã có với ứng dụng quản trị - đó là nơi mà rất nhiều năng suất sẽ đến từ đó. Tôi chỉ cần một cách để thực thi ai có quyền truy cập vào cái gì. Xem bản cập nhật của tôi ở trên để biết ví dụ. –

5

Hệ thống cấp phép Django hoàn toàn quy tắc. Mỗi mô hình có một bộ quyền mặc định. Bạn cũng có thể thêm các quyền mới cho các mô hình của mình.

Mỗi người dùng có một nhóm quyền cũng như thành viên nhóm. Người dùng cá nhân có thể có các quyền riêng lẻ. Và họ kế thừa các quyền từ tư cách thành viên nhóm của họ.

Chức năng chế độ xem của bạn (và mẫu) có thể dễ dàng kiểm tra sự vắng mặt của các quyền đó ở bất kỳ cấp độ chi tiết nào bạn cần sử dụng.

Và nếu điều này là không đủ cho bạn, hồ sơ add-on cho phép bạn chưa tùy chọn hơn cho việc xác định một "Thành viên" và khả năng, quyền hạn, vai trò, trách nhiệm của họ, vv

Và nếu isn này không đủ cho bạn, bạn có thể xác định các lược đồ xác thực của riêng mình.


Điều quan trọng là không để thử và xác định các nhóm đó là tập con thực sự của người dùng, không cờ tiêu đề hoặc vai trò xác định. Bạn không bao giờ cần phải "thiết lập quyền cho một tập hợp con của một nhóm". Bạn cần phải có các nhóm nhỏ hơn. Nhóm được xác định xung quanh tập con của mọi người.

Quyền mặc định của Django là xung quanh quyền truy cập mô hình, không phải truy cập hàng trong mô hình. Mặt khác, vấn đề của bạn là về tập con của các hàng trong một số mô hình: Khách hàng, Cửa hàng, Nhân viên, Người quản lý.

Bạn sẽ cần một bộ cơ bản của FK trong số các mục này và một số bộ lọc để đặt các hàng. Bạn có thể gặp sự cố khi thực hiện việc này với các trang quản trị mặc định. Bạn có thể cần phiên bản quản trị viên của riêng bạn để sử dụng các bộ lọc chuyên dụng.


Nếu bạn không thể làm điều đó với hệ thống cấp phép Django, bạn nên suy nghĩ lại các trường hợp sử dụng của mình. Nghiêm túc.

[Giao diện Django-REST, tuy nhiên, là con thú hoàn toàn khác, và đòi hỏi một số dịch vụ chăm sóc và nuôi dưỡng.]

2

Từ django 1.2 có hỗ trợ cho các quyền cấp hàng, mà django-guardian làm cho rất trực quan để xử lý.

Các vấn đề liên quan