2009-07-29 4 views
14

Tôi không chắc liệu tôi có nên làm điều này khác với MVC hay không, nhưng tôi tò mò phương pháp được khuyến nghị để thêm thông tin bổ sung vào tài khoản Người dùng ASP.NET khi sử dụng Tư cách thành viên là gì các nhà cung cấp? Ngoài ra cách liên kết việc sử dụng này với các thực thể khác.Kết hợp thêm thông tin với ASP.NET MVC Membership

Thông thường, tôi không bận tâm đến các cấu hình và muốn thêm thông tin bổ sung vào bảng chỉ cần tham chiếu USERID. Đây có phải là tốt/xấu/chấp nhận được đối với phương pháp ASP.NET MVC hay không, hoặc điều gì sẽ là một lựa chọn thay thế?

Trả lời

10

Đó là một câu hỏi hay và tôi đã gặp khó khăn. Tôi nghĩ có ba cách tiếp cận cơ bản;

  1. Sử dụng một nhà cung cấp hồ sơ - điều này làm cho nó dễ dàng để thêm các thuộc tính nhưng cồng kềnh để làm những việc như tạo ra một bảng của người dùng, đặc biệt là nếu bạn cần phải áp dụng các bộ lọc/tìm kiếm. API chỉ không cắt nó.

  2. Thêm bảng mới (hoặc mở rộng bảng hiện có) và sau đó tham gia. Sau đó, bạn sẽ cần phải viết các phương thức của riêng mình để lấy lại dữ liệu tùy chỉnh.

  3. Viết nhà cung cấp tư cách thành viên của riêng bạn mở rộng lớp MembershipProvider.

Đối với dự án cuối cùng của tôi, tôi đã sử dụng cách tiếp cận thứ hai - Tôi đã viết một nhà cung cấp SQL rất hạn chế chỉ cần tạo người dùng, xác thực và thay đổi mật khẩu. Đối với phần còn lại của các phương pháp ảo tôi chỉ cần ném một NotImplementedException.

Sau đó, tôi đã thêm một lớp mới bổ sung thêm các thuộc tính bổ sung mà tôi cần và tạo nó để nó có thể được khởi tạo bằng cách chuyển vào tiêu chuẩn MembershipUser. Một cái gì đó như thế này:

public static CustomMember GetMember(MembershipUser user) 
{ 
    // Get your custom member 
} 

Bằng cách đó bạn có thể sử dụng MembershipUser tiêu chuẩn cho hầu hết mọi thứ nhưng nếu bạn cần biết thêm chi tiết về người dùng hiện tại bạn làm công cụ như thế này:

MembershipUser user = Membership.GetUser(); 
CustomMember member = CustomMember.GetMember(user); 

Tôi muốn được quan tâm để xem cách tiếp cận của những người khác là gì, mặc dù.

+0

Cảm ơn bạn đã trả lời. Tôi thích cách tiếp cận của bạn. Tôi cũng tò mò muốn biết những gì người khác nghĩ. – Dkong

+0

Tôi không chắc chắn làm thế nào bạn 'trộn và kết hợp' nhà cung cấp thành viên, chắc chắn CustomMember.GetMember() sẽ kéo dữ liệu ra khỏi một số bảng tùy chỉnh trong khi Membership.GetUser() sẽ hành động trên bảng asp_users mặc định? – greenimpala

+0

Xin chào, cảm ơn lời khuyên. Nhưng có bài viết nào hay các phương pháp hay nhất về lựa chọn phương pháp này? Tôi rất biết ơn các liên kết đó. –

1

Thực tế là bạn đang sử dụng MVC sẽ không có bất kỳ tác động đáng kể nào theo cách bạn đối phó với tư cách thành viên và 'dữ liệu người dùng'.

Tôi cũng thường tránh ASP.NET Profiles, và thực sự là thành viên ASP.NET mặc định, thích cuộn nhà cung cấp thành viên của riêng tôi và lược đồ 'profile', liên kết với bảng người dùng hiện tại của tôi.

Đăng nhận xét nếu bạn quan tâm đến thông tin thêm về nhà cung cấp tư cách thành viên khách hàng.

0

Tôi muốn thấy nhiều phản hồi hơn về chủ đề này và những gì mọi người làm. Tôi hiện đang sử dụng hệ thống nhà cung cấp tư cách thành viên/vai trò asp.net tiêu chuẩn trong một ứng dụng MVC asp.net và không thích nó nhiều.

Cách tiếp cận của tôi là thay đổi bảng aspnet_users và thêm vào một loạt các cột bổ sung; CompanyId, StreetAddress vv

Tôi đã lưu cài đặt hồ sơ người dùng về cách họ sử dụng trang web trong cấu hình chuẩn; họ sử dụng chủ đề gì, bao nhiêu bản ghi danh sách trang được hiển thị và những thứ khác.Khi hầu hết mọi người tìm thấy, nhận được thông tin trong và ngoài hồ sơ là một nỗi đau và từ những gì tôi đọc trong các hệ thống lớn có thể trở thành một nút cổ chai hiệu suất do serialization.

Tôi nghiêng về phía trên bảng của mình phù hợp hơn với lược đồ ứng dụng của tôi, triển khai nhà cung cấp sql tùy chỉnh và sau đó xem một số thuộc tính bảo mật bổ sung trong asp.net mvc nếu tôi cần chúng.