{
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;
}
}