2010-01-20 5 views
0

을 제공 :확인 사용자 권한은 작업 공간의 목록을 감안할 URL

http://server/managed_path/sitecoll/basic 
http://server/managed_path/sitecoll/blank 
http://server/managed_path/sitecoll/decision 
http://server/managed_path/sitecoll/multipage 
http://server/managed_path/sitecoll/social 

어떻게 DoesUserHavePermissions()를 호출 할 수 있습니다 - 현재에 액세스 할 수 있습니다 로그인 한 사용자가 있는지 확인하려면 - 또는 비슷한 웹 사이트?

foreach (String s in workspaces) 
{ 
    using (SPSite site = new SPSite(s)) 
    { 
     using (SPWeb web = site.OpenWeb(s)) 
     { 
    // web.DoesUserHavePermissions(...) 
     } 
    } 
} 
:

나는 그들이에 액세스 할 수있는 작업 공간의 목록이 출력에 사용자 정의 컨트롤을 쓰고 있어요,하지만 난 확인하려고 할 때, 나는 다양한 오류를 얻을이 코드로 해결할 수없는 것

답변

1

1) 귀하의 예제에서 URL 목록 모두 같은 사이트 모음에 포함 된 단지 다른 웹이,이, 당신은 SPSite 때마다 다시 열 필요가 없습니다

2 단지 SPWebs를 의미이다) 때 spsite를 여는 경우 다음 예와 같이 "SystemAccount.Token"을 사용하십시오. http://blackninjasoftware.com/2009/04/09/how-to-programmatically-impersonate-users-in-sharepoint/

SPSite tempSite = new SPSite(siteStr); 
SPUserToken systoken = tempSite.SystemAccount.UserToken; 
using (SPSite site = new SPSite(siteStr, systoken)) { 
    //here goes the foreach loop and you iterate through the workspaces 
} 

이렇게하면 "DoesuserHavePermissions"메소드를 호출 할 수 있습니다.

3) 런타임에 SPWebs를 열고 닫으면 성능이 떨어집니다. 가능한 경우 코드 결과를 캐시하십시오.

+0

좋은 답변입니다. 사용자가 웹에 액세스 할 수없는 경우 웹을 열 수 있다고 생각하지 않습니다. 기껏해야 FileNotFound 예외가 발생하고 최악의 경우 예외없이 SPSite의 웹이 열립니다. OpenWeb을주의 깊게 읽고 원하는 웹을 얻을 수 있는지 확인하십시오. –

+1

@Kit Menke, SystemAccount의 사용자 토큰을 사용하여 SPSite 객체를 열면 * 시스템 계정입니다. 따라서 시스템 계정으로 수행 할 수있는 모든 작업을 수행 할 수 있습니다. – naivists

+0

죄송합니다. 분명히 그것을 아주 자세히 읽지 않았습니다. :) 시스템 계정으로 모든 것에 액세스 할 수 있습니다. 나는 현재 사용자가 URL을 열 수 있는지 여부를 결정할 수있는 시스템 계정이되는 것을 이해하지 못합니다 ... –