Tôi đang cố gắng bảo mật các tuyến đường MVC của mình từ một nhóm người dùng đáp ứng một bộ tiêu chí. Vì MVC dường như sử dụng các thuộc tính khá nhiều và Steven Sanderson sử dụng một thuộc tính để mở rộng bảo mật trong cuốn sách MVC chuyên nghiệp của mình, tôi bắt đầu đi xuống tuyến này, nhưng tôi muốn xác định quy tắc dựa trên hành động mà tôi áp dụng nó.Truyền Func làm tham số thuộc tính để bảo đảm các tuyến MVC
Một số hành động chỉ dành cho nhân viên, một số thì không.
Một số hành động chỉ dành cho công ty1, một số hành động không phải là.
Vì vậy, tôi đã suy nghĩ kiểu này sử dụng ...
[DisableAccess(BlockUsersWhere = u => u.Company != "Acme")]
public ActionResult AcmeOnlyAction()
{
...
}
[DisableAccess(BlockUsersWhere = u => u.IsEmployee == false)]
public ActionResult EmployeeOnlyAction()
{
...
}
Trông khá sạch sẽ với tôi và thực sự là khá dễ dàng để thực hiện, nhưng tôi nhận được lỗi biên dịch sau:
'BlockUsersWhere' không phải là đối số thuộc tính được đặt tên hợp lệ vì nó không phải là thông số thuộc tính hợp lệ loại
Rõ ràng bạn không thể sử dụng đối số Func làm đối số. Bất kỳ đề xuất nào khác để giải quyết vấn đề này hay một thứ gì đó khác cung cấp cách sử dụng đơn giản mà chúng tôi đã yêu thích trong các dự án MVC của chúng tôi?
Cảm ơn, đây là điều đầu tiên tôi nghĩ nhưng với cách tiếp cận này, tôi mất khả năng tạo quy tắc duy nhất trên cơ sở theo ngữ cảnh mà không phải cập nhật lớp thuộc tính. Tôi có thể sẽ đi xuống con đường này. – jjr2527
Vâng, các thuộc tính chỉ có thể truyền đạt một lượng thông tin giới hạn. Họ thực sự chỉ nên chỉ định về siêu dữ liệu. Hành vi phức tạp hơn thuộc về mã. – marcind