2012-03-15 62 views
26

Tôi đã bật xác thực biểu mẫu trong ứng dụng web ASP.NET MVC của mình. Tôi muốn cho phép người dùng ẩn danh chỉ truy cập vào một số trang cụ thể, bao gồm Register.cshtml chẳng hạn. Tôi đã có thể cho phép truy cập vào tập tin CSS của tôi từ web.config gốc của tôi bằng cách làm điều này.Làm cách nào để cho phép người dùng ẩn danh truy cập vào một số trang nhất định trong MVC?

<location path="Content/Site.css"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 

Bây giờ tôi muốn cho phép truy cập vô danh vào các trang khác, như Trang chủ và Đăng ký. Có cơ thể nào biết cách đạt được điều này không?

Trả lời

43

Trong MVC, bạn thường sử dụng thuộc tính [Authorize] để quản lý ủy quyền. Bộ điều khiển hoặc hành động cá nhân được mặc quần áo với thuộc tính đó sẽ yêu cầu người dùng được ủy quyền để truy cập chúng - tất cả các hành động khác sẽ có sẵn cho người dùng ẩn danh.

Nói cách khác, một cách tiếp cận danh sách đen, nơi các hành động yêu cầu ủy quyền được liệt kê đen cho người dùng ẩn danh sử dụng [Authorize] - tất cả các hành động (không mặc quần áo với thuộc tính) sẽ có sẵn.

Cập nhật:

Với MVC4 một thuộc tính mới đã được giới thiệu, cụ thể là thuộc tính [AllowAnonymous]. Cùng với thuộc tính [Authorize], bây giờ bạn có thể sử dụng phương pháp danh sách trắng thay thế. Cách tiếp cận danh sách trắng được thực hiện bằng cách thay đổi toàn bộ bộ điều khiển bằng thuộc tính [Authorize], để buộc ủy quyền cho tất cả các hành động trong bộ điều khiển đó. Sau đó, bạn có thể ăn mặc các hành động cụ thể, không nên yêu cầu ủy quyền, với thuộc tính [AllowAnonymous] và do đó chỉ liệt kê trắng những hành động đó. Với cách tiếp cận này, bạn có thể tự tin rằng bạn không, do nhầm lẫn, quên ăn mặc một hành động với [Authorize], để nó có sẵn cho bất cứ ai, mặc dù nó không nên.

Mã của bạn sau đó có thể là một cái gì đó như thế này:

[Authorize] 
public class UserController : Controller { 

    [AllowAnonymous] 
    public ActionResult LogIn() { 
     // This action can be accessed by unauthorized users 
    } 

    public ActionResult UserDetails() { 
     // This action can NOT be accessed by unauthorized users 
    } 
} 
+0

: nếu đây là lý do tại sao tôi không thể nhìn thấy Register.cshtml của mình. khi tôi chỉ cho phép xác thực biểu mẫu. – JED

+0

@JED Không chắc chắn, bạn có thể cần bổ sung câu hỏi của bạn với một số ngữ cảnh khác để giải quyết vấn đề đó. Bạn có gặp bất kỳ lỗi nào hoặc điều gì sẽ xảy ra khi bạn cố truy cập vào chế độ xem đăng ký của mình? –

+0

tôi nghĩ rằng tôi biết vấn đề là gì. tôi từ chối tất cả quyền truy cập của người dùng trong cấu hình của tôi – JED

3

Trong Web.config tôi đã ủy quyền dưới đây

<authorization> 
    <deny users ="?"/> 
</authorization> 

điều này gây ra

[AllowAnonymous] 

không hoạt động chính xác , tôi đã phải loại bỏ sự cho phép của Web.config của tôi, và trong tất cả các bộ điều khiển đặt dòng

[Authorize] 

trước khi khai báo lớp học, để hoạt động chính xác.

+0

Cảm ơn bạn, đây là điều duy nhất làm việc cho tôi! Cảm ơn rất nhiều –

+0

Bạn được chào đón, tôi hy vọng thông tin này hữu ích cho nhiều Nhà phát triển hơn. –

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