2013-04-24 4 views
2



Sharepoint 온라인에서 사용자 지정 서식 파일을 사용하고 있으며 하위 사이트를 만들 때 그룹을 자동으로 목록에 할당하려고합니다. 내가 무슨 짓을 :온라인으로 공유 지점에서 프로그램 방식으로 권한 할당

  • 비주얼 스튜디오
  • 추가
  • 어떻게해야합니까

아래 스크립트로 featureactivated 방법을 가득 마지막 기능

  • 에 이벤트 수신기에서 템플릿을 생성 될 때 하위 사이트가 만들어지면 featureactivated 메서드가 실행되고 지정된 그룹은 해당 권한이있는 목록에 할당됩니다.

    public override void FeatureActivated(SPFeatureReceiverProperties properties) 
        { 
         using (SPSite site = properties.Feature.Parent as SPSite) 
         { 
         SPWeb web = (SPWeb)properties.Feature.Parent; 
    
         try 
         { 
          SPList internalNotes = web.Lists.TryGetList("Internal Notes"); 
          SPList externalNotes = web.Lists.TryGetList("Notes"); 
    
          SPGroup headOfArtists = web.SiteGroups.GetByName("Head of Production"); 
          SPGroup stageDesigners = web.SiteGroups.GetByName("Logistics Manager"); 
    
          web.BreakRoleInheritance(true); 
    
          Tools.GroupHandler.addGroupToSPWeb(web, SPRoleType.Editor, headOfArtists); 
          Tools.GroupHandler.addGroupToSPWeb(web, SPRoleType.Reader, stageDesigners); 
    
          internalNotes.BreakRoleInheritance(true); 
          externalNotes.BreakRoleInheritance(true); 
    
          Tools.GroupHandler.addGroupToSPList(web, SPRoleType.Reader, headOfArtists, externalNotes); 
          Tools.GroupHandler.removeGroupFromList(web, stageDesigners, externalNotes); 
    
         } 
         catch (Exception e) 
         { 
          logger.LogError("Failed to add rights", e); 
         } 
         } 
    

    GroupHandler 클래스는 다음과 같습니다 정적 클래스 :이 이벤트 수신기를 포함하는 템플릿, 이벤트 수신기와 하위 사이트를 만들 때

    public static class GroupHandler 
        { 
        public static void addGroupToSPWeb(SPWeb web, SPRoleType roleType, SPGroup group) 
        { 
         try 
         { 
         SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group); 
         SPRoleDefinition roleDefinitionRead = web.RoleDefinitions.GetByType(roleType); 
         roleAssignment.RoleDefinitionBindings.Add(roleDefinitionRead); 
         web.RoleAssignments.Add(roleAssignment); 
         } 
         catch (Exception e) 
         { 
         logger.LogError("Failed to add rights", e); 
         } 
    } 
    
    public static void addGroupToSPList(SPWeb web, SPRoleType roleType, SPGroup group, SPList list) 
    { 
        try 
        { 
        SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group); 
        SPRoleDefinition roleDefinitionRead = web.RoleDefinitions.GetByType(roleType); 
    
        roleAssignment.RoleDefinitionBindings.Add(roleDefinitionRead); 
        //list.RoleAssignments.Remove(group); 
        list.RoleAssignments.Add(roleAssignment); 
        } 
        catch (Exception e) 
        { 
        logger.LogError("Failed to add rights", e); 
        } 
    } 
    
    public static void removeGroupFromList(SPWeb web, SPGroup group, SPList list) 
    { 
        try 
        { 
        list.RoleAssignments.Remove(group); 
        } 
        catch (Exception e) 
        { 
        logger.LogError("Failed to add rights", e); 
        } 
    } 
    } 
    

    문제점
    단지 ("Head of Production"및 "Logistics Manager"의 예에서 특정 목록에 할당하려는 그룹을 버립니다.) SharePoint 사이트를 온라인 상태로하고 Sandbox Solutions 테스트 환경에서 모든 것이 제대로 작동하므로 아무 것도 디버깅 할 수 없습니다.

  • 답변

    0

    관리 코드가 포함 된 샌드 박스 솔루션을 사용하지 말고 SharePoint App Model 프로젝트를 사용하여 SharePoint 호스팅 또는 공급자 호스팅 중 하나를 수행하는 것이 좋습니다. 주로 사용하는 접근 방식이 사용되지 않으므로 ' 당신이 진술 한 것처럼 디버깅 할 수 없습니다. 공급자 MVC 또는 Web Forms 프로젝트에서 Managed Code CSOM을 사용하면 쉽게 점프 할 수 있습니다. 그런 다음 Remote Event Reciever를 사용하여 매우 쉽게 디버깅 할 수 있습니다. codeplex의 Office AMS 샘플에는 원격 이벤트 수신기를 사용하는 방법을 보여주는 샘플 프로젝트가 있으며 Visual Studio 2013 http://officeams.codeplex.com/에서 Azure Service Bus 방식을 사용하여 실시간으로 디버깅하는 방법을 보여줍니다. 또한 해당 코드 샘플을 다운로드하면 앱 모델에서 보안을 관리하는 예도 있으므로 잘 읽어야합니다.