사용자 지정 ASP.NET 역할 공급자를 구현 중이며 전달 된 사용자가 이미 전달 된 역할 인 경우 해당 AddUsersToRoles
메서드가 ProviderException
을 던져야하는지 궁금합니다. 기본 Microsoft SQL Server 역할 공급자 SqlRoleProvider
은 다음을 표시합니다. 행동, 심지어 official Microsoft documentation하지만 추천하지 않습니다내 사용자 정의 RoleProvider가 AddUsersToRoles에서 예외를 throw해야합니까?
예외 정보를 : System.Configuration.Provider.ProviderException을 : 사용자 'myTestUser는'역할 'myTestRole'이미 사용 중입니다.
이 경우에는 공급자를 예외를 throw하지 않고 지정된 사용자가 이미 지정된 역할에있을 때 계속 이동하는 것이 좋습니다. 그런 식으로 호출 코드는 중복에 대해 걱정할 필요가 없습니다. 그러나이 경우 throw되는 예외에 의존하는 기존 역할 공급자 사용 코드가있을 수 있습니까? 만약 그렇다면, 마이크로 소프트 스스로가 그것을 추천하는 것처럼 보이지 않는다는 것을 감안할 때 그렇게해야할까요?
AddUsersToRoles
로 구현 그냥이 : 나는 사용자가 역할에 이미있는 경우 예외를 throw하지 않습니다AddUsersToRoles
방법과 유사한 방법을 구현하려는 경우, 나는 3 개 대안을 볼 수 있습니다 다른 동작은 기본값
SqlRoleProvider
과 다릅니다.- 내 역할 공급자 클래스에
EnsureUsersInRoles
메서드를 새로 구현하고((MyProvider)(Roles.Provider)).EnsureUsersInRoles()
을 사용하여 내 호출 코드에서 액세스하십시오. - 그냥 완전히 다른 클래스에서 구현하십시오.
그래서 예외를 throw하지 않는 호출을 사용할 수 있습니까? – Jez
나는 이것을 생각하고 있었다. 사용자가 아직 역할이 없다는 사전 점검이 추가 작업이라는 데 동의하지만 MS 자료의 패턴은 매우 분명합니다. "AddWhatever"는 뭔가를 추가 할 수없는 경우 오류를 던집니다. 그리고 반향에 나는 적어도 좋다고 생각합니다. 왜냐하면 항목이 이미 추가 되었기 때문에있을 수있는 "침묵 오류"와는 달리 당신이 어디에 있는지 알기 때문입니다. 왜냐하면 뭔가 잘못 되었기 때문일 수 있습니다. (다음 주석 참조) –
누락 된 항목이 있지만 예외가 발생하지 않는 경우를 추가하는 방법이 필요한 경우 해당 메서드 "EnsureUsersInRoles"를 호출하는 것을 고려하십시오. 그렇게하면 원하는 행동을 취할 수 있지만 기존 패턴을 어기는 방법을 도입하지는 않을 것입니다. –