2013-02-12 3 views
2

사용자 지정 ASP.NET 역할 공급자를 구현 중이며 전달 된 사용자가 이미 전달 된 역할 인 경우 해당 AddUsersToRoles 메서드가 ProviderException을 던져야하는지 궁금합니다. 기본 Microsoft SQL Server 역할 공급자 SqlRoleProvider은 다음을 표시합니다. 행동, 심지어 official Microsoft documentation하지만 추천하지 않습니다내 사용자 정의 RoleProvider가 AddUsersToRoles에서 예외를 throw해야합니까?

예외 정보를 : System.Configuration.Provider.ProviderException을 : 사용자 'myTestUser는'역할 'myTestRole'이미 사용 중입니다.

이 경우에는 공급자를 예외를 throw하지 않고 지정된 사용자가 이미 지정된 역할에있을 때 계속 이동하는 것이 좋습니다. 그런 식으로 호출 코드는 중복에 대해 걱정할 필요가 없습니다. 그러나이 경우 throw되는 예외에 의존하는 기존 역할 공급자 사용 코드가있을 수 있습니까? 만약 그렇다면, 마이크로 소프트 스스로가 그것을 추천하는 것처럼 보이지 않는다는 것을 감안할 때 그렇게해야할까요?

  1. AddUsersToRoles로 구현 그냥이 : 나는 사용자가 역할에 이미있는 경우 예외를 throw하지 않습니다 AddUsersToRoles 방법과 유사한 방법을 구현하려는 경우

    , 나는 3 개 대안을 볼 수 있습니다 다른 동작은 기본값 SqlRoleProvider과 다릅니다.

  2. 내 역할 공급자 클래스에 EnsureUsersInRoles 메서드를 새로 구현하고 ((MyProvider)(Roles.Provider)).EnsureUsersInRoles()을 사용하여 내 호출 코드에서 액세스하십시오.
  3. 그냥 완전히 다른 클래스에서 구현하십시오.

답변

0

나는 나의 질문에서 제안한 길 2)을 끝내었다. 일부 추가 메서드를 사용하여 RoleProvider을 구현 한 다음 캐스트 ((MyProvider)(Roles.Provider))을 사용하여 내 호출 코드에서 원하는 비 예외 처리 기능을 가진 EnsureUsersInRoles() 중 하나 인 추가 메서드에 액세스 할 수 있습니다.

0

개인적으로, 나는 마이크로 소프트가하는 것과 일치 할 것입니다. 어딘가에 던져 질 예외가 필요하지 않을 가능성을 배제하는 것은 어려울 것입니다.

+0

그래서 예외를 throw하지 않는 호출을 사용할 수 있습니까? – Jez

+0

나는 이것을 생각하고 있었다. 사용자가 아직 역할이 없다는 사전 점검이 추가 작업이라는 데 동의하지만 MS 자료의 패턴은 매우 분명합니다. "AddWhatever"는 뭔가를 추가 할 수없는 경우 오류를 던집니다. 그리고 반향에 나는 적어도 좋다고 생각합니다. 왜냐하면 항목이 이미 추가 되었기 때문에있을 수있는 "침묵 오류"와는 달리 당신이 어디에 있는지 알기 때문입니다. 왜냐하면 뭔가 잘못 되었기 때문일 수 있습니다. (다음 주석 참조) –

+0

누락 된 항목이 있지만 예외가 발생하지 않는 경우를 추가하는 방법이 필요한 경우 해당 메서드 "EnsureUsersInRoles"를 호출하는 것을 고려하십시오. 그렇게하면 원하는 행동을 취할 수 있지만 기존 패턴을 어기는 방법을 도입하지는 않을 것입니다. –

관련 문제