Tôi có một ứng dụng MVC được chứng thực Windows với một lớp kho lưu trữ. Tất cả sự tương tác của bộ điều khiển với cơ sở dữ liệu được thực hiện thông qua kho lưu trữ. Mỗi bộ điều khiển có tham chiếu đến kho lưu trữ:Mẫu để thực hiện ủy quyền trong lớp kho lưu trữ của ứng dụng MVC
public class PostController : Controller
{
private Repository db = new Repository();
[HttpPost]
public ActionResult DeletePost(int id)
{
// Authorize that the user is allowed to delete this post...
db.DeletePost(id);
}
}
Câu hỏi của tôi là liệu có cách nào tốt để chuyển logic ủy quyền của tôi vào tầng lưu trữ hay không. Tôi muốn chức năng Repository.DeletePost()
từ chối xóa các bài đăng không được tạo bởi người dùng đã được xác thực. Vấn đề là kho lưu trữ của tôi không biết ai là người dùng được xác thực. Bộ điều khiển biết (thông qua Controller.User
).
Chuyển số Controller.User
vào hàm xây dựng Repository
không hoạt động, bởi vì Controller.User
dường như không được xác định tại thời điểm hàm tạo được gọi.
Tôi làm cách nào để thông báo cho Repository
người dùng được xác thực là ai? Nó sẽ là tốt nhất để chỉ cần xây dựng các Repository
trong mỗi hành động? Hoặc là một ý tưởng tồi để xử lý nó trong lớp kho lưu trữ?
Đây là những gì im thực sự làm, nhưng tôi cảm thấy nó không có đủ "tách" như bây giờ kho của chúng tôi được gắn với người dùng của chúng tôi, mà có thể là một loại Admin sẽ không thể làm bất cứ điều gì trừ khi bạn đã chiếm cho nó ở mọi bước – Worthy7