Ok, do đó, điều này có vẻ giống như một nhu cầu chung. Một chút googling tìm thấy rất nhiều cách để làm điều này. Tôi quan tâm đến cách "mvc đúng" nhất để làm điều đó.Cách khởi tạo thông tin về ủy quyền
Tôi có, ở góc trên bên phải của ứng dụng, một lời chào có nội dung là Hello FirstName LastName
. Giờ đây, bạn có thể dễ dàng nhận được tên người dùng của người dùng đã đăng nhập, thông qua số IPrincipal
(aka User.Identity.Name
). Tuy nhiên, điều này sẽ không cho tôi biết họ và tên của người dùng. Tôi phải nhấn API thành viên để có được điều đó.
Nhập API thành viên có những hạn chế của nó. Nó truy cập cơ sở dữ liệu mỗi lần, bổ sung thêm quyền truy cập db vào mỗi trang được phân phối. Thật dễ dàng để đặt một số biến phiên khi đăng nhập, nhưng điều này chỉ hoạt động cho phiên đó. Nếu người dùng nhấp vào "Nhớ thông tin đăng nhập của tôi", thì không có lần đăng nhập nào xảy ra vào lần tiếp theo và tôi vẫn phải tải các giá trị này.
- Tôi có thể tạo nhà cung cấp tư cách thành viên của riêng mình để thực hiện một số bộ nhớ đệm, nhưng đó là rất nhiều công việc cho một mục đích đơn lẻ hoặc ít hơn.
- Tôi có thể sử dụng
Application_AuthenticateRequest
và nhấn api thành viên và lưu trữ các giá trị trong biến phiên hoặc tương tự. Điều này là ok, nhưng có vẻ như một chút sức mạnh vũ phu. - Tôi có thể đăng ký bộ lọc chung và xử lý OnAuthenticate, về cơ bản cũng làm như vậy. Điều này có vẻ tốt hơn một chút, nhưng tôi không thích các chi nhánh ở đây.
- Tôi có thể lấy được bộ điều khiển cơ sở và mô phỏng thêm các thuộc tính để cung cấp thông tin này. Điều này có vẻ hơi "trường học cũ", và tôi ghét phải làm một lớp cơ sở cho một mục đích duy nhất.
- Tôi có thể tạo phương pháp tĩnh bộ nhớ cache để nhận thông tin về quyền truy cập đầu tiên. Điều này về cơ bản không tốt hơn nhiều so với một singleton.
- Tôi cũng có thể tạo IPrincipal của riêng mình, nhưng điều đó có nghĩa là truyền nó mỗi lần để lấy dữ liệu, và điều đó có vẻ khó khăn. Tôi có thể bọc nó trong một lớp khác để đơn giản hóa nó, nhưng vẫn ...
- Tôi có thể lưu trữ dữ liệu trong cookie xác thực biểu mẫu và lấy nó từ đó. Có một số công cụ có sẵn để làm cho dễ dàng hơn.
Có phương pháp nào mà tôi chưa từng nghĩ đến không? Và cách "mvc đúng" nhất để làm điều đó là gì?
Câu hỏi rất quan trọng đối với tôi quá. –