2009-08-29 33 views
27

Thẻ ủy quyền xác định xem người dùng có được ủy quyền hay không?Thẻ ủy quyền hoạt động như thế nào? - ASP.NET MVC

Giống như nói, nếu người dùng đăng nhập và họ cố truy cập chế độ xem có thẻ Ủy quyền. Làm cách nào để xác định liệu người dùng có được ủy quyền hay không? Liệu nó có một truy vấn đến cơ sở dữ liệu và kiểm tra?

Nếu họ chuyển sang chế độ xem có ủy quyền vai trò thì sao? Nó có truy vấn bảng vai trò thành viên không?

Tôi chỉ tự hỏi vì tôi có những gì các bảng thành viên ASP.NET xem xét trùng lặp userNames. Tôi sử dụng nghiêm trọng các trường để xác định người dùng nào là gì, cho phép người dùng có cùng tên người dùng trùng lặp, nhưng vẫn là duy nhất trong cơ sở dữ liệu của tôi.

Điều này khiến tôi phải viết các phương thức tùy chỉnh cho nhiều công cụ thành viên .NET vì tất cả đều được sử dụng "userName" để thực hiện tìm kiếm thay vì sử dụng UserId.

Vì vậy, tôi bây giờ tự hỏi nếu điều này có thể là trường hợp với thẻ ủy quyền. Kể từ khi tôi không có đầu mối như thế nào nó hoạt động và như thế nếu tôi đã không sử dụng NET thành viên tôi sẽ không có một đầu mối như thế nào nó sẽ xác định nó.

+0

Tôi không có câu trả lời trực tiếp cho câu hỏi của bạn, nhưng hãy nhớ rằng ASP.NET MVC là nguồn mở và bạn có thể tự mình kiểm tra. Tôi sẽ giả định nó chỉ yêu cầu các nhà cung cấp thành viên. – JoshJordan

Trả lời

24

Thẻ Authorize sử dụng tất cả các kiểm tra thành viên được tích hợp từ ASP.NET. Rất dễ dàng để đóng vai trò của riêng bạn. Ví dụ:

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) throw new ArgumentNullException("httpContext"); 

     // Make sure the user is authenticated. 
     if (httpContext.User.Identity.IsAuthenticated == false) return false; 

     // Do you own custom stuff here 
     bool allow = CheckIfAllowedToAccessStuff(); 

     return allow; 
    } 
} 

Sau đó, bạn có thể sử dụng thẻ [MyAuthorize] sẽ sử dụng séc tùy chỉnh của bạn.

+0

Tính năng kiểm tra thành viên hoạt động như thế nào? Nó có sử dụng userName hay UerId không? – chobo2

+0

Tôi không chắc chắn 100% nhưng tôi nghĩ chủ yếu là kiểm tra httpContext.User.Identity.IsAuthenticated và trả lại giá trị của nó nhưng tôi biết nó cũng có khả năng kiểm tra vai trò là tốt. – Kelsey

+0

hmm Tôi không biết có vẻ như không hoạt động Tôi vẫn có thể xem trang. Nó chỉ đặt url trả về trong url của tôi và đó là về nó. – chobo2

14

ControllerActionInvoker phân tích cú pháp thuộc tính và gọi OnAuthorization() trên đó khi đến lúc kiểm tra thông tin đăng nhập.

Phương pháp AuthorizationAttribute.OnAuthorization() về cơ bản kiểm tra xem liệu User.Identity.IsAuthenticated có đúng hay không. Điều này chỉ dựa trên chức năng của FormsAuthentication hoặc bất kỳ chương trình xác thực nào khác mà bạn có thể đang sử dụng.

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