获取SharePoint中的所有网站、列表和用户权限
是否可以使用代码获取SharePoint中所有站点的名称?具体来说,是否可以列出每个站点的所有列表名称,并列出所有用户及其对列表的访问权限?快速、肮脏、仅经过一定程度的测试,但它应该可以工作。用您自己的URL替换web应用程序URL:获取SharePoint中的所有网站、列表和用户权限,sharepoint,moss,sharepoint-2007,Sharepoint,Moss,Sharepoint 2007,是否可以使用代码获取SharePoint中所有站点的名称?具体来说,是否可以列出每个站点的所有列表名称,并列出所有用户及其对列表的访问权限?快速、肮脏、仅经过一定程度的测试,但它应该可以工作。用您自己的URL替换web应用程序URL: static void ListLists() { SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://mossdev:8060"));
static void ListLists()
{
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://mossdev:8060"));
foreach(SPSite site in webApp.Sites)
{
try
{
PrintWebAndListsRecursive(site.RootWeb, 0);
}
finally
{
site.Dispose();
}
}
Console.ReadLine();
}
static void PrintWebAndListsRecursive(SPWeb web, int level)
{
Console.WriteLine("".PadLeft(level * 3) + "Site: {0} ({1})", web.Title, web.Url);
foreach(SPList list in web.Lists)
{
Console.WriteLine("".PadLeft((level + 1) * 3) + "List: {0}", list.Title);
foreach(SPRoleAssignment roleAssignment in list.RoleAssignments)
{
if(roleAssignment.Member is SPGroup)
{
var group = (SPGroup) roleAssignment.Member;
Console.WriteLine("".PadLeft((level + 2) * 3) + "Group: {0}", group.Name);
foreach(SPUser user in group.Users)
{
Console.WriteLine("".PadLeft((level + 4) * 3) + user.Name);
}
}
else
{
Console.WriteLine("".PadLeft((level + 2) *3) + "User: {0}", roleAssignment.Member.Name);
}
foreach(SPRoleDefinition roleDef in roleAssignment.RoleDefinitionBindings)
{
if (!roleDef.Hidden)
{
Console.WriteLine("".PadLeft((level + 3) * 3) + "Role Definition: {0}", roleDef.Name);
}
}
}
}
foreach(SPWeb subWeb in web.Webs)
{
try
{
PrintWebAndListsRecursive(subWeb, level+1);
}
finally
{
subWeb.Dispose();
}
}
}
当你还在枚举一个站点时,你怎么能处理它呢?除非我有一个巨大的金发瞬间,我很确定我在循环结束时处理了站点对象。我编辑了你的答案,因为你永远不应该处理site.RootWeb,即
使用(SPWeb web=site.RootWeb)
。“本文的早期版本指出,调用应用程序应在处理使用它的SPSite对象之前处理SPSite.RootWeb属性。这不再是官方指南。dispose清理由SharePoint framework自动处理。”from