2009-03-31 7 views
2

나는 개인 프로젝트를 위해 NHibernate를 배우기 시작했다. 그러나 나는 뭔가를 얻지 못하고 있다고 느낀다. 나는 다음과 같이 앱을 작동시키는 데 익숙하다.NHIbernate and Security/Business Layer

프리젠 테이션 레이어 -> 비즈니스 레이어 -> 지속성 레이어. 예를 들어, 내 프레젠테이션 계층은 BusinessLayer.GetCustomer (id)를 호출합니다. 그 방법에서는 호출자가 고객을 가져올 수있는 권리가 있는지 확인합니다. 그래, 여전히 NHibernate 잘 작동합니다. 내 질문에도 불구하고 어떻게 업데이트, 추가 및 삭제에 대한 보안이 있습니까? 예를 들어, 내가 가지고있는 고객을 수정하고 싶다고 가정 해 봅시다. 일반적으로이 작업을 수행했을 것입니다.

customer.FirstName ="Mike"; 
BusinessLayer.UpdateCustomer(customer); 

다시 말하면, UpdateCustomer 메서드는이 고객을 업데이트 할 수 있는지 확인합니다. 알았어.하지만 NHibernate를 사용하면 고객을 업데이트하기 위해 FirstName을 설정하기 만하면된다. 나는 그것이 투명하기 때문에 나는 Update를 호출 할 필요가 없다. 그것이 바로 Hibernate의 핵심입니다. "투명하고 자동화 된 지속성". 그렇다면이 투명성과 함께 보안 검사를 어떻게 수행 할 수 있습니까? 나는 실수를하지 않고 다음과 같이 할 수있는 자신을 신뢰하지 않습니다.

Oops. 나는 데이터베이스에서 모든 고객의 이름을 지웠다. 이것은 인위적인 것입니까? 예. 이제 BusinessLayer 체크를 수행하면 다른 사용자의 이름을 업데이트 할 수 없기 때문에 예외가 발생합니다.

다른 문제. 내가 관리자 해요 정말 시스템에 아무것도 할 수 있으며, 나는 다음과 같은 코드가 있다고 가정 : 그래서 여기 난 그냥 주문을 필터 싶어,

//Display a customers orders that haven't shipped yet: 
var Orders = Customer.Orders; 
Orders.RemoveAll(order => order.HasNotShipped); 
Grid.DataSource = Orders; 
Grid.DataBind(); 

OK,하지만 난 실수로 데이터베이스에서 삭제 결국 . 투명성 때문에 저에게 뭔가 나쁜 일이 생겼습니다. 위험을 어떻게 줄일 수 있습니까?

은 정말 는 자 NHibernate를 사용하는을 원하지만하지가 길을 잘못하고 싶어 할 . 도움! :)

답변

0

보안 질문에 대해서는 NHibernate Inteceptor documentation을보십시오. 인터셉터를 사용하면 세션 수명주기에 참여할 수 있으므로 원하는 기능을 사용할 수 있습니다.

두 번째 문제는 리포지토리를 만들고 필요한 기능 만 노출하는 이유입니다. 응용 프로그램이 RemoveAll 함수를 필요로하지 않는 경우 (대부분는 필요하지 않음) 노출시키지 마십시오.

+0

나는 요격기 물건을 보았다. 그것이 다른 개발자들이 사용하고있는 것이라면 나는 궁금해했다. 멀리있는 곳까지, 아마 내가 너를 오해하고있다. 내 예제에서는 Orders 단순히 IList 반환됩니다. 해당 IList에서 항목을 제거하면 데이터베이스에서 삭제되지 않습니까? – aquinas

+0

세션 관리 방법에 따라 다릅니다. 저장소 레이어가 모든 레코드를 반환하고 세션을 닫으면 목록에서 삭제하면 데이터베이스에 아무런 영향을 미치지 않습니다. 그러면 저장소가 데이터를 삭제하는 메소드를 제공합니다. – DoniG