【问题标题】:Getting all sites, lists and user permissions in SharePoint在 SharePoint 中获取所有网站、列表和用户权限
【发布时间】:2012-03-07 14:47:24
【问题描述】:

是否可以使用代码获取 SharePoint 中网站的所有名称?具体来说,是否可以列出每个站点的所有列表名称,并列出所有用户及其对列表的访问权限?

【问题讨论】:

    标签: sharepoint moss sharepoint-2007


    【解决方案1】:

    快速,肮脏,只是经过一些测试,但它应该可以工作。将 Web 应用程序 URL 替换为您自己的:

     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 即using(SPWeb web = site.RootWeb)。 “本文的早期版本表明,调用应用程序应在处置正在使用它的 SPSite 对象之前处置 SPSite.RootWeb 属性。这不再是官方指南。处置清理由 SharePoint 框架自动处理。”来自msdn.microsoft.com/en-us/library/aa973248(v=office.12).aspx
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多