2009-07-23 10 views
9

Tôi đã xây dựng một trang web MVC trên IIS6. Tôi đã sử dụng ASP.NET Security tích hợp không có tư cách thành viên, chỉ là cách nó được triển khai trong giải pháp mẫu. Nó rất dễ dàng để đảm bảo một contoller hoặc hành động, nhưng bây giờ tôi cần để lộ quản lý người dùng cho một quản trị viên đăng nhập vào trang web. Tôi hiểu rằng các điều khiển ASP được xây dựng để làm điều này không phải là "thực hành tốt nhất" và là một con chó để làm việc. Vậy thực tiễn tốt nhất để cung cấp quản lý người dùng thông qua ứng dụng ASP.NET MVC là gì?Làm cách nào để hiển thị bảo mật và quản lý người dùng được tích hợp cho ứng dụng MVC?

Tôi đã xem xét sử dụng Khung thực thể và kết nối nó với vô số các procs được lưu trữ. nhưng điều đó có vẻ khó xử. Tôi thấy các tùy chọn cho AccountMembershipService và FormsAuthenticationService. Đó là những gì mà bộ điều khiển tài khoản dự án hiện có sử dụng. Nhưng, tôi cũng không phải là fimilliar.

Tôi không thể không nghĩ rằng điều này đáng lẽ đã có trong mẫu dự án. Đây là một phần cơ bản của bất kỳ trang web nào và bạn được tặng 15%, tại sao không phải là phần còn lại?

+0

Bạn sẽ sử dụng phiên bản IIS nào? Tôi khá chắc chắn IIS 7 có một cái gì đó trong xây dựng cho quản lý người dùng. – Perhentian

+1

Có lẽ bạn chỉ nên cập nhật câu hỏi của mình thay vì đăng nhiều nhận xét, giúp người đọc cố gắng trả lời câu hỏi của bạn dễ hơn :) – Peter

Trả lời

0

Tôi có quyền tác giả của người dùng theo cách hơi điên cuồng. Rào cản lớn nhất để vượt qua là nó là ok để sử dụng các lớp thành viên, mặc dù tôi không sử dụng các khía cạnh hồ sơ của thành viên. Nó rất dễ dàng để có được tên người dùng và làm Membership.GetUser (UserName). Sau đó, bạn có thể thực hiện nhiều việc như Mở khóa, Phê duyệt/Không chấp thuận, thay đổi mật khẩu và thay đổi câu hỏi/câu trả lời mật khẩu ... tất cả những điều cơ bản tôi cần.

Dưới đây là những điều cơ bản:

'get current logged in user 
Dim currentUser As MembershipUser = Membership.GetUser() 

'get current logged in user name 
Dim userName = currentUser.UserName 

'get current user email 
Dim userEmail = currentUser.Email 

'get a user to edit 
Dim editingUser = Membership.GetUser(UserName) 

'set the user email 
editingUser.Email = newEmail 
Membership.UpdateUser(editingUser) 

‘unlock user 
editingUser.UnlockUser() 

‘disapprove user 
editingUser.IsApproved = False 
Membership.UpdateUser(editingUser) 

‘approve user 
editingUser.IsApproved = True 
Membership.UpdateUser(editingUser) 

‘change pw 
editingUser.ChangePassword(oldPw, newPw) 

và đó là hầu hết tất cả những gì quá là nó

1

Theo như tôi có thể biết, bạn đang sử dụng SqlMembershipProvider làm việc triển khai Nhà cung cấp tư cách thành viên của mình. Tôi thực sự khuyên bạn nên xem xét một số phương pháp của các lớp MembershipUserMembershipProvider (chẳng hạn như CreateUser, v.v.) để đạt được những gì bạn đang cố gắng làm thay vì làm việc với các bảng cơ sở dữ liệu bên dưới được sử dụng cho việc thực hiện.

Bạn cũng có thể xem this article để biết giới thiệu chi tiết về số Tư cách thành viên, vai trò và hồ sơ của ASP.NET.

+0

nghe có vẻ như khu vực tôi đã đi một chút. Cảm ơn bài viết. Tôi nghĩ rằng MVC chỉ sử dụng một phần của chức năng này mặc dù, và tôi muốn tránh sử dụng toàn bộ cơ chế thành viên. Nhưng có lẽ đó là một ý tưởng tồi, chúng ta sẽ thấy. – DrydenMaker

+0

Tôi cũng muốn lưu ý rằng tôi đã tránh hướng dẫn như thế này bởi vì họ không thực sự phù hợp với MVC. Mặc dù vậy, tôi đã làm rõ một số điều cho tôi. – DrydenMaker

+0

Tôi nhận ra rằng hướng dẫn không phù hợp với tư duy MVC nhưng nó cung cấp cho bạn những điều cơ bản về xử lý các đối tượng thành viên, vai trò và hồ sơ mà bạn có thể sử dụng để xây dựng dự án MVC của mình. Tôi nhận ra rằng đó là một PITA không có một bộ khởi động cho quản trị thành viên đi kèm với ASP.NET MVC. Tuy nhiên, với lịch sử phát triển, tôi đoán thực tế là bộ lọc [Authorize] thậm chí còn tồn tại ngoài hộp là vì nó tầm thường để thực hiện cho nhóm MVC. Vì vậy, tôi đoán bạn nên dựa vào mẫu MVC mặc định nhiều hơn như một bản demo hơn là một điểm khởi đầu. – paracycle

1

Kiểm tra dự án này tại CodePlex: ASP.Net MVC Membership Starter Kit

+0

Ai đó sẽ quan tâm đến lý do tại sao bị bỏ phiếu? AFAIK dự án này cho phép bạn chỉnh sửa thành viên người dùng và vai trò trong MVC. (Nếu nó thực sự sai, tôi sẽ xóa câu trả lời) –

+0

Tôi không biết tại sao nó lại bị bỏ phiếu, nhưng đây có phải là một phần chính thức của MVC không? Có vẻ như nó nên được thực hiện như thế nào, đó là một cách hoàn chỉnh hơn. – DrydenMaker

+0

Tôi thấy một lý do, tôi nghĩ rằng ASP.Net MVC Membership Starter Kit được viết bằng C#, trong khi tôi đang sử dụng VB2k8. – DrydenMaker

0

Tôi không biết về "thực hành tốt nhất", nhưng đây là cách tôi sẽ làm điều đó (và làm thế nào nó được loại viết bằng "Professional ASP.NET MVC 1.0"):

Bạn nên có một tùy chỉnh (hoặc mặc định) ProfileProvider và MembershipProvider tại chỗ để làm việc này.

Tạo bộ điều khiển xử lý tất cả các tác vụ quản lý thành viên, ví dụ: Thành viênAdminController

Bộ điều khiển này phải có thuộc tính Authorize [Roles = "Administrator"] được chỉ định để tất cả các hành động trong bộ điều khiển này sẽ chỉ được xử lý nếu người dùng có vai trò Quản trị viên.

Bây giờ bạn có thể xây dựng các chế độ xem CRUD và hành động như thế nào bạn muốn chỉ sử dụng bộ điều khiển này.

+0

Đó là hướng tôi đang đi. Tôi nghĩ rằng mẫu dự án là một danh sách vì nó cho phép đăng ký và tất cả mọi thứ NHƯNG phơi bày chính quyền. Đó là một cách lửa chắc chắn để có được rất nhiều ứng dụng nghèo ra khỏi đó. – DrydenMaker

+0

Tất cả phụ thuộc vào cách bạn triển khai xác thực của mình. Tôi không nghĩ rằng đó là một danh sách, khung công tác mvc asp.net mang lại cho nhà phát triển nhiều trách nhiệm hơn bởi vì rất nhiều thứ không được xử lý theo cách mặc định mà biểu mẫu web đã làm. Nếu bạn không yêu cầu xác thực cho phần còn lại của trang web, chỉ cần không cung cấp cho họ. Bạn luôn phải hiển thị biểu mẫu đăng nhập công khai để truy cập quản trị viên của mình ... điều này không khác với biểu mẫu web. – Peter