Cho phép nói rằng tôi có một ASP.Net MVC App và ứng dụng này (UI) tham chiếu một lớp logic nghiệp vụ (BLL) và BLL tham chiếu lớp truy cập dữ liệu (DAL) của tôi..Net Membership trong nTier App
Tôi đang sử dụng Nhà cung cấp tư cách thành viên và vai trò tùy chỉnh để cấp phép.
Tôi đang cố gắng xác định những lớp nào cần tham khảo nhà cung cấp tư cách thành viên của tôi.
Trong MVC bạn có thể thực hiện kiểm tra ủy quyền theo cách sau đây:
[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
//do something
}
Và trong BLL của tôi, tôi có thể muốn kiểm tra xem nếu một người dùng đang ở trong một vai trò cũng như:
public static bool IsRoleEditor(User user, Role userRole)
{
bool retValue = false;
if (user.Application.AppID == UserRole.Application.AppID)
{
if (Roles.IsUserInRole("ModifyRoles"))
{
retValue = true;
}
return retValue;
}
Tôi sẽ phải tham khảo và khởi tạo các lớp thành viên trong cả hai lớp nếu tôi làm điều này. Đây có phải là cách đúng để kiến trúc sư một ứng dụng như thế này? Có vẻ như rất nhiều dự phòng.
Vì tôi có BLL nên tránh sử dụng thuộc tính "[Authorize (Roles =" SomeRoleName ")]" và thay vào đó gọi hàm BLL từ bên trong mã MVC để kiểm tra xem người dùng có trong vai trò không? Nếu tôi làm điều này thì MVC vẫn cần một tham chiếu đến nhà cung cấp thành viên để xác thực và như vậy để tận dụng lợi thế của Đăng nhập và các điều khiển ASP khác, phải không?
Tôi có thoát khỏi cơ sở và đi sai hướng không?
Chắc chắn sử dụng thuộc tính Ủy quyền trong MVC. Bạn không cần phải kiểm tra thủ công IsInRoles. –
Vấn đề là tôi cần phải xử lý thêm logic kinh doanh ngoài "IsInRole" hoặc "Ủy quyền" mà tôi nghĩ nên luôn luôn có trong BLL. Tôi có thể chuyển đối tượng người dùng ở mọi nơi, nhưng sau đó tại sao không chỉ bỏ qua ủy quyền và chỉ sử dụng BLL. – Jay