문제

항상 로그인 한 사용자를 항상 얻을 수 있어야합니다.

호출 프로세스가 통과 할 객체는 SPWEB입니다.

레거시 코드이므로 호출 프로세스가 보내는 것을 변경할 수 없으며 다음과 같은 문제가 있습니다. 그 중 일부는 SPWEB가 실행되는 SPWEB에서 통과하며 일부 프레임 게이브에있는 SPWEB에서 일부는 전송됩니다.상승 된 프레임 보조를 위해 로그인 한 사용자가 시스템으로 반환됩니다.

두 경우 모두 현재 로그인 한 사용자를 가져 오려고합니다.

이 모든 것이 가능합니까?

도움이 되었습니까?

해결책

여기에 두 가지 가능한 상황이 있습니다.

케이스 A : RunWitheLevatedPrivileges 범위 밖에 있습니다. RunWitheLevatedPrivileges 대리자리 범위 외에 저장된 SPWEB 인스턴스가 상승 된 SPWEB 인스턴스를 얻을 수 있습니다. 이것은 대부분의 경우 코드 공포이지만 여전히 가능합니다. 이 경우 상승 된 하나의 URL을 기반으로 새 인스턴스를 재 작성하면 새로운 인스턴스 이 상승하지 않으므로 사용자가 거기에서 사용자를 얻을 수 있습니다.

케이스 B : runwitheLevatedPrivileges 대리자 내에서 메소드를 호출합니다. 이 경우 SPWEB 인스턴스를 재생성하는 것은 당신에게 좋은 일이 아닙니다. 새로운 인스턴스는 여전히 높아질 수 있으므로 아무 것도 없습니다. 이 상황을 피하기 위해서는 고도 범위 밖에서 생성 된 인스턴스를 찾아야합니다. 어떻게? 실행 컨텍스트를 이용하여 다음과 같이, 기능 이벤트 수신자에서 사용자 지정 방법에 있으므로 수신 된 매개 변수를 변경할 수 없으므로 이벤트 속성 등의 웹 인스턴스에 액세스 할 수 있습니다. 일부 종류의 컨텍스트에 액세스해야합니다. spcontext.current.web에 의존 할 수 있습니까? 그 인스턴스가 상승하지 않으므로 사용자가 사이트를 브라우징하는 현재 하나 여야합니다. 즉, 컨텍스트가 유효하지 않은 상황에있을 수 있습니다.이 경우 AFAIK는 상승 된 인스턴스에서 원래 사용자를 얻을 수있는 방법이 없습니다. 어딘가에 저장해야합니다 (팁 : 정적 싱글 톤). 상승 컨텍스트를 입력하기 전에.


편집

runwithelevatedPrivileges 대리인 내에서 메서드가 호출되면 수행 할 작업은 유효한 spContext를 확신 할 수 없습니까? 이것은 매우 야생의 추측 일뿐 만 아니라 그것에 대해 생각해 봅시다. RunWitheLevatedPrivileges는 응용 프로그램 풀 ID로 되돌아갑니다. 응용 프로그램 풀이없는 경우 앱 풀 ID가 없으므로 대리인 외부 및 내부의 현재 사용자가 동일해야합니다. 앱 풀이 있으면 대부분의 시간은 SPContex를 갖게 될 때 정의에 의해 분열되지 않습니다. 또한 타이머 작업에서 실행되는 특정 경우와 컨텍스트가 null입니다.이 경우에는 어쨌든 앱 풀 ID를 사용하고 있으므로 상승해야합니다. 효과가 없습니다.

이를 바탕으로 가능할 때 SPContex에서 사용자를 사용하고 컨텍스트가 null 일 때 상승하고 불확실한 사용자가 동일하게 가정하는 것으로 보입니다. 그래도 소금의 곡물로 가져 가라.

다른 팁

FAZIO가 SPWEB 객체를 전달하기 위해 가장되는 경험 코드를 사용하여 경주 코드를 사용해야하지만, 당신은 할 수없는 경우가 아닌 낙관적 인 개발자에게 명시되었으므로!

승강기는 SPWEB 객체가 시스템 사용자에게 상승하고 SPWEB 객체가 처분되지 않은 경우에 관계없이 해당 사용자를 반환합니다!

SPUser loggedinUser = SPContext.Current.Web.CurrentUser;
.

위의 코드는 상승 된 SPWEB 객체에서 벗어나지 만 상승 된 블록 내에있는 경우 시스템 계정을 불행하게 되돌아갑니다!

코드를 게시 할 수 있습니까?또는 전달 된 SPWEB 객체를 사용하려는 경우에 더 많은 정보를 제공합니까?어쩌면 현재 열린 SPWEB 개체에서 위의 코드를 사용할 수 있으며 SPWEB 객체를 상승 된 개체로 설정할 수 있습니까?

그러나 짧은 대답은 사용자가 상승 된 사용자로부터 실제 로그인 한 사용자를 얻을 수 없습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top