2010-05-27 3 views
0

Sharepoint에 두 개의 목록이 있다고 가정 해 보겠습니다. "집"및 "지역"이라고합시다.조회 항목 항목에 대한 사용 권한을 통해 목록 항목 사용 권한 상속

각 집은 조회 필드를 통해 지역에 할당됩니다.

목록 항목 권한은 지역에 설정됩니다.

이제 사용자는 읽기 권한이있는 지역에 속한 집만 보길 원합니다. 나는 상대적으로 단순해야한다고 생각한다. 쉬운 일이 아니다. 나는 무언가를 들여다보고 있습니다.

답변

1

새 집을 추가 할 때 발생하는 자동화 된 프로세스를 원할 경우 EventReceivers를 사용하여이를위한 간단한 방법이 충분합니다. EventReceivers에 대한 경험이 없다면 this article을 확인하십시오. 거의 동일한 내용으로 ItemAdded 및 ItemUpdated 이벤트를 생성해야합니다. 하나는 집이 처음 만들어 졌을 때이고, 다른 하나는 집의 영역이 변경된 경우입니다. 첫째, 아직 고유 한 과제가 없다면 역할 상속을 중단해야합니다. 이제 업데이트에서 영역이 변경되지 않은 경우 진행할 필요가 없습니다. 그렇지 않으면 현재 사용 권한 집합을 지우고 목록을 조회 한 다음 항목 ID를 검색하여 조회 값의 영역을 검색해야합니다. 최소한 읽기 권한이있는 모든 사용자에게 해당 지역의 권한 전체를 반복하고 해당 사용자를 집에 추가하십시오. 그것이 완료되면, 업데이트하고, 그 집을 볼 수있는 유일한 사람들은 그 특정 지역을 읽을 수있는 사람들입니다. 아래는 이벤트 수신기에서 코드가 어떻게 보이는지에 대한 일반적인 요지입니다. 은 "읽기"역할 정의는 지역에 해당 사용자에게 할당 된 경우

using (SPSite site = new SPSite(properties.WebUrl)) 
{ 
    using (SPWeb web = site.OpenWeb()) 
    { 
     SPListItem houseItem = properties.ListItem; 
     SPList regionList = web.Lists["Region"]; 
     if (houseItem.HasUniqueRoleAssignments) 
     { 
      houseItem.BreakRoleInheritance(false); //Clears all 
     } 

     //After confirming that the region has changed and is not empty/null... 
     SPFieldLookupValue regionLookup = houseItem["RegionLookup"] as SPFieldLookupValue; 
     SPListItem regionItem = regionList.GetItemById(regionLookup.LookupId); 
     SPRoleDefinition readAccess = web.RoleDefinitions["Read"]; 
     foreach (SPRoleAssignment userRole in regionItem.RoleAssignments) 
     { 
      //READ CHECK 
      if (userRole.RoleDefinitionBindings.Contains(readAccess)) 
      { 
       houseItem.RoleAssignments.Add(userRole); 
      } 
     } 
     this.DisableEventFiring(); 
     houseItem.SystemUpdate(false); 
     this.EnableEventFiring(); 
    } 
} 

참고 지점에 대한 //READ CHECK를 표시하는 것이,이 모든 코드는 확인됩니다 않습니다. "ViewItem"권한을 구체적으로 확인하려면 해당 RoleAssignment의 모든 RoleDefinitionBinding을 반복하고 BasePermissions에 "ViewItem"이 포함되어 있는지 확인해야합니다.

+0

나는 쉬운 방법이되기를 바랐다.하지만 이제는 어려운 방법이 어떻게 이루어 졌는지 꽤 많이 알았다. 건배! –

+0

@ 댄 예, 권한은 그런 멍청한 무리입니다. 내 SharePoint 응용 프로그램에서 시간 기반 사용 권한 워크 플로를 설정하여 "재미"를 상상할 수 있습니다. –

관련 문제