2013-04-24 68 views
2




我正在使用Sharepoint在線自定義模板,並且我想 在創建子網站時自動將組分配到列表。我所做的:以編程方式在SharePoint上分配權限

  • 創建在Visual Studio
  • 添加事件接收到的最後一個特徵
  • 漫天的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); 
    } 
} 
} 

的問題
當我創建一個包含此事件接收器模板,事件接收器的子網站只拋棄我想分配給特定列表的組(在上面的示例中,「生產負責人和」後勤經理「)。我無法調試任何內容,因爲它是在線Sharepoint,並且在我的沙盒解決方案測試環境中一切正常。

回答

0

我的建議是,不要將沙盒解決方案與託管代碼一起使用,但要使用SharePoint應用程序模型項目來執行SharePoint託管或提供程序託管......主要是因爲您使用的方法已被棄用,像你所說的那樣調試。 提供程序託管也許更容易,因爲您可以在MVC或Web窗體項目中使用託管代碼CSOM來執行此操作。然後,您可以非常輕鬆地使用遠程事件接收器並進行調試。在codeplex上的Office AMS示例中,有一個示例項目顯示瞭如何使用遠程事件接收器,並在Visual Studio 2013 http://officeams.codeplex.com/中利用Azure Service Bus方法實時調試它。 同樣在該代碼示例下載中也有一個管理App模型中的安全性的示例,因此您應該很好。

相關問題