2013-05-07 32 views
6

Tôi đã gán quyền cho người dùng trong ứng dụng Django 1.5 của tôi. Khi tôi liệt kê tất cả các quyền của người dùng vớiDjango: user.has_perm luôn đúng và người dùng không phải là superuser. Tại sao?

In [1]: user.get_all_permissions() 
Out[1]: set([u'profile.change_profile']) 

Tôi có thể thấy một quyền (đúng và mong muốn). Người dùng cũng không phải là siêu người dùng chứ không phải là quản trị viên.

In [2]: user.is_superuser 
Out[2]: False 

Tuy nhiên, nếu tôi cố gắng sử dụng user.has_perm, tôi luôn luôn có được True như quay trở lại đối với bất kỳ yêu cầu sự cho phép đệ trình.

In [3]: user.has_perm('random_permission') 
Out[3]: True 

Hành vi tôi mong đợi nếu người dùng là siêu người dùng/quản trị viên. Tại sao người không phải là siêu người dùng luôn nhận được True cho mọi yêu cầu? Tôi đã bỏ lỡ bất kỳ thiết lập nào?

+1

Bạn có đang sử dụng mô hình 'Người dùng' tùy chỉnh hoặc Phụ trợ xác thực không? Có thể đọc trên các tài liệu ở đây: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#handling-authorization-in-custom-backends –

Trả lời

4

Như đã đề cập trong nhận xét của Thane Brimhall, bạn nên kiểm tra phần phụ trợ xác thực của mình. Bạn có thể tìm thấy nhận xét này về phương pháp has_perm của Mô hình người dùng trong django sources:

Trả về True nếu người dùng có quyền được chỉ định. Phương thức này truy vấn tất cả các phụ trợ auth có sẵn, nhưng trả về ngay lập tức nếu bất kỳ phần phụ trợ nào trả về Đúng. Do đó, người dùng có quyền từ một phụ trợ độc quyền được giả định là có quyền chung.

Cũng đừng quên kiểm tra nhóm người dùng. Kiểm tra backend mặc định cho các quyền của nhóm người dùng do đó nó có thể được kết nối.

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