关于SharePoint 2007的用户组和用户

   首先,在站点(Site,not Site Collection)的层次上,是不能创建用户组(Group)的。虽然和你的“直觉”不一致,但确实如此。所有用户组都是基于站点集的!当我们在一个站点集中任何一个站点中创建一个用户组的时候,实际上都是在站点集层次上创建了一个用户组。
  如果你试图用代码在SPWeb.Groups里面添加新的SPGroup,是不会成功的。只有SPWeb.SiteGroups里面才能添加新的SPGroup。
  当我们在 MOSS2007界面上操作时,“确实”是可以在一个站点中创建用户组的,而且这个用户组只对这个站点有对应的权限。但实际上,MOSS2007仍然是在站点集的层次上创建了一个用户组,然后将这个用户组与这个站点建立起相应的角色关联(Role Assignment),这样,这个用户组就对相应的站点具有了相应的权限。
  然后,我们讲讲用户,在SPWeb的众多属性中,你能发现与用户有关的三个属性:Users、AllUsers、SiteUsers,它们有什么区别呢?
  简单来说,SPWeb.Users中包含的是“真正”的添加到这个站点中的用户,这个用户只属于这个站点。SPWeb.AllUsers中包含的是所有对这个站点有访问权限的用户,这些用户可能是这个站点的直接用户(即被包含在SPWeb.Users中),也可能是通过其他手段来获取对这个站点的访问权限的。SPWeb.AllUsers包含了SPWeb.Users中的所有用户。SPWeb.SiteUsers是定义在站点集层次上的用户。
  由于用户组是属于站点集的,所以当我们在任意一个站点中进行操作,为一个用户组中添加一个用户时,这个用户都是被添加到站点集层次用户组中,也就是说,你在SPWeb.Users中是肯定找不到这个用户的。你可以在SPWeb.SiteUsers中找到他(因为这个用户是被添加到站点集层次的用户组中,所以他算一个站点集层次的用户),还可以在SPWeb.AllUsers中找到他(因为这个用户确实对这个站点具有访问权限)。
  
  
  但是,如果在站点中添加用户的时候,不是将他放到某个用户组中,而是直接给这个新用户赋予相应的权限级别(也就是Role),那么这个用户就算是“真正的”被加入到这个站点,你可以在SPWeb.Users集合中找到他。同时,在SPWeb.SiteUsers和SPWeb.AllUsers集合中,也能找到这个用户。
  
  
  最后,再顺便解释一个很多人疑惑的问题。在WSS中,管理员可以直接修改站点用户的属性,比如电子邮件,但是在 MOSS中,是不能直接修改的。如果进入到修改界面,你只会看到:
  
  
  这是因为在 MOSS中,有一个“用户配置文件(User Profile)”的组件,在共享服务管理中,你可以看到用户配置文件管理界面。MOSS使用用户配置文件来存放用户的属性信息,比如Email。MOSS会定期(通过计时器作业,SPTimerV3 NT Service)将存放在用户配置文件里面的属性信息“推送”给站点用户,自动更新站点用户的各项属性。所以,如果需要更改用户的属性值,在MOSS中需要通过用户配置文件。如果直接修改了站点用户的属性值(比如通过代码),在下次用户配置文件“推送”的时候,将会覆盖掉用户修改的属性值。WSS由于没有用户配置文件这个功能,所以允许用户和管理员直接更改站点用户的属性值。
代码示例:
         public static void Main( string[] args)
        {
            SPWebApplication webapp = SPWebApplication.Lookup( new Uri([url]http: //Hello:9090[/url]));
            SPSite spSite = null;
            spSite = webapp.Sites[ "ssp/admin"];
            SPWeb spWeb = spSite.OpenWeb();

             string strSiteURL = spSite.Url.ToString();
             string strLoginName = @"Hello\tt";
             string strEmail = "";
             string strName = @"HELLO\tt";
             string strNotes = "";
             string strGroup = string.Empty;
             //Get or create user or remove user
            SPUser spUser = GetSPUser(strLoginName, strSiteURL);
             if (spUser == null)
            {
                spUser = CreateUser(strLoginName, strEmail, strName, strNotes, strSiteURL);
            }
             else
            {
                RemoveUser(strLoginName, strSiteURL);
            }
           Open group
             //SPGroup spGroup = spWeb.SiteGroups[strGroup];
             //Add and update group with new user
             spGroup.AddUser(spUser.LoginName, spUser.Email, spUser.Name,"Added by UserControl");
             //spGroup.Update();
        }

         public static SPUser GetSPUser( string strLoginName, string strSiteURL)
        {
            SPUser spReturn = null;
            SPSite spSite = null;
            SPWeb spWeb = null;
             try
            {
                 //Open the SharePoint Site
                spSite = new SPSite(strSiteURL);
                spWeb = spSite.OpenWeb();
                 //Check to see if user exists
                spReturn = spWeb.AllUsers[strLoginName];
            }
             catch (Exception)
            {
            }
             finally
            {
                spWeb.Close();
                spSite.Close();
            }
             return spReturn;
        }
         public static SPUser CreateUser( string strLoginName, string strEmail, string strName, string strNotes, string strSiteURL)
        {
            SPUser spReturn = null;
            SPSite spSite = null;
            SPWeb spWeb = null;
             try
            {
                 //Open the SharePoint site
                spSite = new SPSite(strSiteURL);
                spWeb = spSite.OpenWeb();
                 //Assign role and add user to site
                SPRoleAssignment spRoleAssignment = new SPRoleAssignment(strLoginName, strEmail, strName, strNotes);
                 //Using Contribute, might need high access
                SPRoleDefinition spSPRoleDefinition = spWeb.RoleDefinitions[ "Full Control"];
                spRoleAssignment.RoleDefinitionBindings.Add(spSPRoleDefinition);
                spWeb.RoleAssignments.Add(spRoleAssignment);
              
                 //Update site
                spWeb.Update();
                spReturn = spWeb.AllUsers[strLoginName];
            }
             catch (Exception)
            { }
             finally
            {
                spWeb.Close();
                spSite.Close();
            }
             return spReturn;
        }
         public static bool RemoveUser( string strLoginName, string strSiteURL)
        {
            SPSite spSite = null;
            SPWeb spWeb = null;
             try
            {
                spSite = new SPSite(strSiteURL);
                spWeb = spSite.OpenWeb();
                 //this need use Site Users
                SPUserCollection col = spWeb.SiteUsers;
                SPUser user = col[strLoginName];
                 if (user != null)
                    col.Remove(strLoginName);
            }
             catch (Exception)
            { }
             finally
            {
                spWeb.Close();
                spSite.Close();
            }
             return true;
        }

 

 

==============================================================================================

几天前,我的一个朋友提出了一个很值得关注的问题。他尝试以编程方式向 Windows 声明网站添加新用户,结果遇到了各种各样的问题;最初,他试图通过域\用户名和 SPRoleAssignment 类添加用户,结果行不通;然后他尝试通过各种方法为用户名提供声明编码的值,结果在一定程度上解决了问题,但是出现了一些奇怪的负面影响,如名称显示两次。我没有机会亲自研究他尝试过的所有方法和遇到的所有问题,我第一次尝试便找到了可行的方法,即使用 SPWeb 的 EnsureUser 方法。这样做比想方设法地尝试得到帐户名的编码要简单得多;这样做也容易得多,因为只需要传递帐户名,而不是传递添加用户通常必须使用的四个参数。EnsureUser 会自动处理名称的编码,因此真正简化了代码。

出于完整性考虑,下面提供了一个简短的示例:

using (SPSite theSite = new SPSite("http://foo"))
{
  using (SPWeb theWeb = theSite.OpenWeb())
  {

   site.AllowUnsafeUpdates = true;
            web.AllowUnsafeUpdates = true;


    SPUser theUser = theWeb.EnsureUser("domain\username");

 

     site.AllowUnsafeUpdates = false;
            web.AllowUnsafeUpdates = false;
  }
}

 

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值