Sử dụng ASP.NET MVC Tôi đang tạo thuộc tính Authorize tùy chỉnh để xử lý một số logic ủy quyền tùy chỉnh. Tôi đã xem xét rất nhiều ví dụ và nó là khá thẳng về phía trước nhưng câu hỏi của tôi là phương pháp nào là tốt nhất để ghi đè lên, AuthorizeCore hoặc OnAuthorization? Tôi đã thấy nhiều ví dụ ghi đè một hoặc khác. Có sự khác biệt nào không?Mở rộng AuthorizeAttribute Override AuthorizeCore hoặc OnAuthorization
Trả lời
Các đầu mối là trong các loại trở lại:
AuthorizeCore
trả về một boolean - đó là làm quyết định mã. Điều này nên được giới hạn nhìn vào bản sắc của người sử dụng và thử nghiệm mà vai trò họ đang ở vv vv Về cơ bản nó nên trả lời câu hỏi:
Do I want this user to proceed?
Nó không nên thực hiện bất kỳ hoạt động bổ sung "trên mặt".
OnAuthorize
trả về khoảng trống - đây là nơi bạn đặt bất kỳ chức năng nào cần phải xảy ra tại thời điểm này. ví dụ. Viết vào nhật ký, lưu trữ một số dữ liệu trong phiên vv ..
Cảm ơn bạn đã thông tin –
Thật không may AuthorizeCore không chứa AuthorizationContext mà tôi cần (để truy cập RouteData và đưa ra các quyết định dựa trên nó), do đó cách tiếp cận duy nhất tôi thấy là sử dụng OnAuthorize. – gw0
Tại sao Earth không phải là 'AuthorizationContext' được chuyển vào' AuthorizeCore'? Điều này có vẻ là một lỗ hổng lớn. – Jez
Bạn nên đặt bất kỳ mã nào phải chạy bất kể người dùng có được ủy quyền lần đầu hay không hoặc nếu họ đang sử dụng ủy quyền được lưu trong bộ nhớ cache trong AuthorizeCore
.
Nếu bạn nhìn vào mã nguồn, bạn có thể thấy rằng AuthorizeCore
được gọi bằng cả hai OnAuthorize
và OnCacheAuthorization
. Điều này cho phép ủy quyền được lưu trong bộ nhớ cache nhưng vẫn cho phép một số hành động nhất định và đưa ra quyết định thực tế về ủy quyền.
Nếu bạn cần một thứ gì đó từ AuthorizationContext thì bạn có thể tạo thuộc tính để giữ thông tin và sau đó truy cập thông tin đó trong phương thức AuthorizeCore.
Tôi ước tôi có thể đánh dấu câu cuối cùng của câu trả lời của bạn . Bạn thực sự nên in đậm nó. Đề cập đến nhận xét của @ gw0 trong câu trả lời được chấp nhận, điều thực sự không may là đề xuất sử dụng ghi đè sai vì lý do sai đã được bỏ phiếu. –
Tài liệu dành cho AuthorizeAttribute (MSDN) nêu rõ (theo Safety Safety) _ "Bất kỳ thành viên nào không được đảm bảo an toàn." _ Vì vậy, tôi đoán rằng giữ thông tin trong một thuộc tính không phải là một lựa chọn. – bvgheluwe
@BartVG - Tôi không chắc chắn tôi làm theo. An toàn thread phải làm gì với cuộc thảo luận này? Tất cả văn bản đó có nghĩa là bạn phải đồng bộ hóa quyền truy cập vào các đối tượng nếu nó sẽ được sử dụng theo cách đa luồng. –
- 1. Override hàm mà không cần mở rộng các lớp
- 2. Form_Load() 'event' hoặc Override OnLoad()
- 3. Tùy chỉnh MVC AuthorizeAttribute cho ASP.NET Web API
- 4. Django: Mở rộng hoặc bao gồm?
- 5. Mở rộng MKPolylines hoặc tạo nhiều MKPolylines?
- 6. Tùy chỉnh AuthorizeAttribute Không được gọi bởi MVC Framework
- 7. ASP.NET MVC AuthorizeAttribute truyền giá trị cho ActionMethod?
- 8. phép Tuỳ chỉnh trong Web.API
- 9. Tại sao thực hiện onAuthorization trước khi xác thực?
- 10. AuthorizeAttribute v Application_AuthenticateRequest
- 11. Lợi thế chính của việc mở rộng lớp Thread (hoặc khi mở rộng Thread thay vì thực hiện runnable)
- 12. ASP.NET MVC3 Dừng thực hiện hành động/điều khiển trong tùy chỉnh AuthorizeAttribute
- 13. phương pháp mở rộng để mở rộng lớp tĩnh
- 14. SimpleMembership, MVC4, AuthorizeAttribute and Roles
- 15. Extjs: mở rộng lớp thông qua hàm tạo hoặc initComponent?
- 16. Hậu tố hoặc đuôi mở rộng của chuỗi cắt?
- 17. Mở rộng Visual Studio hoặc Resharper để giải mã mã
- 18. ArgumentNullException hoặc NullReferenceException từ phương pháp mở rộng?
- 19. mở rộng (thêm hàng hoặc cột) ma trận scipy.sparse
- 20. Bạn có bao bọc PDO hoặc mở rộng nó không?
- 21. java.io.RandomAccessFile khả năng mở rộng (hoặc các tùy chọn khác)
- 22. Mở rộng hợp lý HOẶC || cú pháp cho mảng trống
- 23. cách mở rộng LoginUrlAuthenticationEntryPoint hoặc cách triển khai AuthenticationEntryPoint
- 24. Censor Plugin hoặc mở rộng cho VLC Media Player
- 25. PHP - mở rộng phương pháp như mở rộng một lớp
- 26. Mở rộng Visual Studio 2010 mở rộng mã
- 27. Ghi đè (hoặc đổ bóng) một phương pháp với phương pháp mở rộng?
- 28. Mở rộng một (ASP.NET) BoundField
- 29. Mở rộng JFrame
- 30. Chuyển đổi Tiện ích mở rộng của Google Chrome sang tiện ích mở rộng của Firefox hoặc Safari
Thanh toán mã nguồn trong MVC4, http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/e0115a823029#src%2fSystem.Web.Mvc%2fAuthorizeAttribute.cs – user1736525