2011-08-31 4 views
0

SharePoint의 하위 사이트에있는 사용자의 사용 권한을 추가하려고합니다. 루트 수준에서 사용자의 사용 권한을 성공적으로 설정할 수 있었지만 하위 수준 하위 사이트의 문제를 해결하는 방법을 모르겠습니다. 아래는 내가 지금 가지고있는 것이지만 VS에 오류가 발생하지 않았지만 충돌이 발생합니다. 어떤 아이디어라도 훌륭 할 것입니다.루트 수준이 아닌 하위 사이트에서 사용자에 대해 SharePoint 사용 권한을 설정하는 방법

 foreach (SPWeb subSite in spSite2.RootWeb.GetSubwebsForCurrentUser()) 
     { 
      if (subSite.Name == "templates") 
      { 
       Console.WriteLine("\nTEMPLATES SITE"); 
       Console.Write("\nApplying 'Read' permission to App_user Account"); 
       spRoleAssignment = new SPRoleAssignment(SPContext.Current.Web.Users[appUserAccount]); 
       spRoleAssignment.RoleDefinitionBindings.Add(SPContext.Current.Web.RoleDefinitions["Read"]); 
       SPContext.Current.Web.RoleAssignments.Add(spRoleAssignment); 
       SPContext.Current.Web.Update(); 
       Console.ForegroundColor = ConsoleColor.Green; 
       Console.CursorLeft = Console.BufferWidth - 16; Console.WriteLine("Applied"); 
       Console.ForegroundColor = ConsoleColor.Gray; 
      } 
     } 

답변

1

달성하려는 목표와 코드 실행 위치 (콘솔 응용 프로그램 또는 타이머 작업 또는 웹 파트에서)가 확실하지 않습니다.

나는 다음과 같은 문제를 참조하십시오

  1. 당신은 콘솔에 로그인 (이 날 코드가 콘솔 응용 프로그램에서 실행 가정하자),하지만 당신은 당신의 코드가 실행되는 경우에만 사용할 수있는의 SPContext.Current에 액세스 HTTP 요청에서.

  2. 웹 컬렉션을 반복합니다. 그러나 각자의 몸에 SPContext.Current.Web이 업데이트됩니다.

  3. web.GetSubwebsForCurrentUser()을 통해 웹 컬렉션을 검색하지만 이러한 개체에 대한 사용 권한을 변경하고 있습니다. 이것은 업데이트 권한이 "관리 작업"이기 때문에 약간의 냄새가 나고 액세스 거부 된 예외를 피하기 위해 낮은 수준의 사용자 컨텍스트에 대해 GetSubwebsForCurrentUser 메서드를 사용할 가능성이 더 큽니다. 예를 들어 안전하게 웹 목록을 표시 할 수 있습니다.

  4. 웹에서 사용 권한/역할을 업데이트하지만 웹에 고유 한 역할 할당이 있는지 확인하지 않습니다.

  5. "템플릿"이라는 이름으로 웹을 확인합니다. GetSubwebsForCurrentUser이 재귀 적이 아니기 때문에이 컬렉션에는 "템플릿"이라는 웹이 하나만있을 수 있습니다. 이 웹은 열 수 있습니다 direclty => 모든 하위 웹을 열어 리소스를 낭비하지 않아도됩니다.

당신의 작업은 특정 웹에 당신이 follwing을 코드를 사용할 수 있습니다 (루트 웹의 1 수준 하위 웹입니다) "템플릿"역할의 권한을 설정하는 경우 :

// Open the web directly since it is a direct child of the site collection. 
// Use a using to properly release the resources 
using (SPWeb web = spSite2.Open("templates")) 
{ 
    SPUser user = web.SiteUsers[appUserAccount]; 
    SPRoleDefinition roleDef = web.RoleDefinitions.GetByType(SPRoleType.Reader); 

    if (!web.HasUniqueRoleAssignments) 
    { 
    web.BreakRoleInheritance(true); 
    } 

    spRoleAssignment = new SPRoleAssignment(user); 
    spRoleAssignment.RoleDefinitionBindings.Add(roleDef); 
    web.RoleAssignments.Add(spRoleAssignment); 

    // No need to update the web when changing the permissions 
} 
+0

하이 제이슨를 , 감사. 하위 사이트 서식 파일의 하위 사이트 인 문서 라이브러리에 어떻게 이것을 사용할 수 있습니까? – karlstackoverflow

+0

문서 라이브러리에 대한 using 문을 편집하는 방법은 무엇입니까 ?? 나는 SPLIst라고 생각한다. – karlstackoverflow

+0

리스트를 얻는다 :'SPList list = web.Lists [ "당신의리스트 제목은 여기에있다.]'. 리스트 객체에서'SPWeb'과 같은 권한 관리를 할 수 있습니다. 당신은'SPList' 객체를 처리 할 필요가 없습니다. 따라서 사용하는 문장은 필요하지 않습니다. – Stefan

0

SPContext의 현재 웹이 아닌 하위 사이트에서 역할을 업데이트 해보십시오.

AFAIK 각 SPWeb 개체에는 고유 한 역할 할당이 있습니다.

관련 문제