2012-06-06 2 views
1

웹 파트를 개발하고 일부 사용자 컨텍스트로 SharePoint 사이트에 배포 할 수 있습니다. 이것은 사용자에게 특정 적입니다. 읽기 전용 사용자로 로그인 한 경우 오류 발생과 같은 오류 메시지가 표시됩니다. 그걸 피할 ​​수있는 방법이 있습니까? 즉, 읽기 전용 사용자로 로그인하면 웹 파트가 해당 사용자에게 표시되지 않아야합니다. 로그인 사용자에게 전체 권한이있는 경우 해당 사용자에게 표시되어야합니다.특정 사용자에게 특정 웹 파트 표시 가능

SPSecurity.RunWithElevatedPrivileges 

메서드 사용자에게 모든 권한이없는 경우에도 지정된 메서드를 모든 권한으로 실행합니다. 이처럼 웹 페이지의 오류를 표시하지 않고 내 기준을 충족시킬 수있는 방법이 있습니다. 제게 해결책을주십시오. 감사합니다. .

답변

3

사용자가 특정 리소스에 액세스하고 웹 파트 렌더링 렌더링을 중지 할 수있는 권한이없는 경우 처리 할 수 ​​있습니다. 당신이 웹 파트의 CreateChildControls의 리소스에 액세스하는 가정 :

private bool accessDenied; 

protected override void CreateChildControls() 
{ 
    try 
    { 
    // prevent SharePoint from catching an access denied exception and 
    // redirecting to the error page. 
    using (new SPSecurity.SuppressAccessDeniedRedirectInScope()) 
    { 
     SPContext.Current.Web.Lists["Restriced"] // some thing... 
    } 
    } 
    catch (UnauthorizedAccessException) 
    { 
    // set variable in case the user has not enough permissions 
    accessDenied = true; 
    } 
} 

지금, 우리는 사용자가 리소스에 액세스 할 수있는 충분한 권한을하지 있는지 여부를 알 수

첫째, 액세스 처리 부인했다. 다음 단계는 렌더링을 비활성화하고 웹 파트와 그 내용을 숨기는 것입니다. 웹 파트를 숨기는 것은 간단합니다.

protected override void RenderWebPart(HtmlTextWriter writer) 
{ 
    if (accessDenied) return; 

    base.RenderWebPart(writer); 
} 

대신 오류 메시지를 표시 할 수 있습니다. 그러나 이것은 목적을 무너 뜨릴 것입니다.

마지막 단계는 웹 파트의 크롬을 비활성화하는 것입니다. 이것은 OnPreRender 방법에 ChromeType를 설정하여 수행 할 수 있습니다 물론

protected override void OnPreRender(EventArgs e) 
{ 
    // Important to call base method in order to ensure child controls... 
    base.OnPreRender(e); 

    if (accessDenied) 
    { 
    ChromeType = PartChromeType.None; 
    } 
} 

, 당신은 당신이 accessDenied가 설정되어 있는지 확인해야 웹 파트에서 다른 방법을 재정의합니다.

관련 문제