2011-08-31 61 views
0

我想为SharePoint中的子网站下的用户添加权限。我能够在根级别上成功地为用户设置权限,但我不确定如何解决较低级别子网站的问题。下面是我目前的情况,但它崩溃了,虽然它在VS中显示没有错误。任何想法都会很棒C# - 如何为子网站下的用户设置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

我不完全确定你正在努力实现的目标以及代码应该执行的位置(控制台应用程序或计时器作业还是Web部件?)。

我看到以下问题:

  1. 您登录到控制台(这让我假设你的代码在控制台应用程序运行),但你访问SPContext.Current,如果你的代码运行这是唯一可用在HTTP请求中。

  2. 您正在遍历一组网络。但是在你的每个身体SPContext.Current.Web已更新。

  3. 您确实通过web.GetSubwebsForCurrentUser()来检索您的网络集合,但会更改这些对象的权限。由于更新权限是“管理任务”,并且方法GetSubwebsForCurrentUser更有可能用于低级别用户上下文以避免拒绝访问异常,所以这会产生一些异味。例如安全地显示网页列表。

  4. 您在Web上更新权限/角色,但检查Web是否缺少唯一的角色分配。

  5. 您检查名为“模板”的网站。由于GetSubwebsForCurrentUser不是递归的,因此该集合中只能有一个名为“模板”的网络。这个网页可以打开direclty =>不需要打开每个子网站来浪费资源。

如果你的任务是给定的网络上设置角色权限的“模板”(这是你的根网站的第一级子网站),你可以使用follwing代码:

// 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

如何编辑文档库的使用语句?我认为这是一个SPLIst – karlstackoverflow

+0

只是得到清单:'SPList list = web.Lists [“您的列表标题在这里”]'。在列表对象上,您可以执行与“SPWeb”相同的权限管理。您不必处置'SPList'对象。所以不需要使用声明。 – Stefan

0

尝试更新子站点中的角色,而不是从SPContext中更新当前网站中的角色?

AFAIK每个SPWeb对象都有自己的角色分配。

相关问题