2010-02-01 6 views
6

Tôi đang làm việc trên một trang web sử dụng các hộp thoại phương thức jquery để thực hiện nhiều việc khác nhau như đăng nhập và như vậy.ASP.NET MVC Authorize Attribute để khởi chạy một phương thức?

Tuy nhiên; chúng tôi có một vấn đề nhỏ với việc sử dụng những điều này .. chúng tôi đang sử dụng thuộc tính [Authorize] trên rất nhiều phương pháp hành động của chúng tôi và vì vậy điều đang xảy ra là nếu người dùng không đăng nhập và truy cập tuyến đường họ cần được ủy quyền cho nó cho thấy các trang đăng nhập như nó là giả sử nhưng rõ ràng đây là giả sử là một phương thức.

Bất kỳ câu chuyện dài nào ngắn, có cách nào để tạo thuộc tính ủy quyền tùy chỉnh có thể kích hoạt phương thức thay vì chế độ xem thực tế tạo nên phương thức đăng nhập không?

+0

Phiên bản nào của ASP.NET MVC bạn đang sử dụng? –

Trả lời

5

Trong trường hợp này, bạn có thể sử dụng thuộc tính bộ lọc hành động tùy chỉnh mở cửa sổ bật lên nếu người dùng không được ủy quyền.
Trong bộ lọc hành động này, hãy kiểm tra xem người dùng đã đăng nhập chưa và thêm giá trị boolean vào bộ sưu tập ViewData.
Aplly thuộc tính trên hành động của bộ điều khiển.
Sau đó, trong trang chính, hãy thêm hiển thị có điều kiện của mã mở cửa sổ bật lên.

Mã cho thuộc tính:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)] 
public class PopupAuthorizeAttribute : AuthorizeAttribute 
{ 
    private void CacheValidateHandler(HttpContext context, object data, ref HttpValidationStatus validationStatus) 
    { 
     validationStatus = this.OnCacheAuthorization(new HttpContextWrapper(context)); 
    } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     bool isAuthorized = false; 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException("filterContext"); 
     } 
     if (this.AuthorizeCore(filterContext.HttpContext)) 
     { 
      HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; 
      cache.SetProxyMaxAge(new TimeSpan(0L)); 
      cache.AddValidationCallback(new HttpCacheValidateHandler(this.CacheValidateHandler), null); 
      isAuthorized = true; 
     } 

     filterContext.Controller.ViewData["OpenAuthorizationPopup"] = !isAuthorized; 
    } 
} 

Trong trang chủ hoặc quan điểm chung khác thêm vẽ có điều kiện:

<% if((bool)(ViewData["OpenAuthorizationPopup"] ?? true)) { %> 
...Your code to open the popup here... 
<% } %> 
+0

Cảm ơn công trình này hoàn hảo – dswatik