MOSS SDK学习(3)
MOSS中的认证方式可以使用集成Windows AD的认证,也可以使用Form形式的认证。改成Form的方法网上已经有了很多例子,不过相对于AD的认证,Form形式还是有一定的不足之处。
这个例子主要功能是列出AD中所有的用户,然后可以选择一些用户加入MOSS中,作为MOSS的用户来登录。
演示效果:
在ListBox中列出AD中的用户,当点击按钮时把用户添加成MOSS中的用户。
首先,需要取得AD中的用户,这里使用的是LADP的方式,需要添加命名空间:
using System.DirectoryServices;
然后取得用户:
private void LoadADInfo()
{
try
{
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://192.168.1.4/CN=Users,DC=*****,DC=*****";
de.Username = "*****\\*****";
de.Password = "*****";
//通过搜索查出所有的人员
SearchResultCollection results;
DirectorySearcher srch = new DirectorySearcher(de);
srch.Filter = "(&(&(objectCategory=person)(objectClass=user)))";
results = srch.FindAll();
foreach (SearchResult sr in results)
{
DirectoryEntry objDE = sr.GetDirectoryEntry();
string userName = objDE.Name.Substring(3);
listBox1.Items.Add(userName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
{
try
{
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://192.168.1.4/CN=Users,DC=*****,DC=*****";
de.Username = "*****\\*****";
de.Password = "*****";
//通过搜索查出所有的人员
SearchResultCollection results;
DirectorySearcher srch = new DirectorySearcher(de);
srch.Filter = "(&(&(objectCategory=person)(objectClass=user)))";
results = srch.FindAll();
foreach (SearchResult sr in results)
{
DirectoryEntry objDE = sr.GetDirectoryEntry();
string userName = objDE.Name.Substring(3);
listBox1.Items.Add(userName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这里注意的是连接AD时的Path后面的两个DC表示AD的域名,
CN是Common Name(公用名称)的缩写。 如AD中的Users
接下来通过对象模型把用户加到MOSS中,MOSS2007中的用户、权限部分的对象模型有了很大的修改,最主要就是不能直接给用户赋予权限,必须通过角色,然后把用户和角色关联来授权,具体代码如下:
string strUserName = listBox1.SelectedItem as string;
//添加用户到网站
SPWeb rootWeb = _siteCollection.OpenWeb("/");
SPUserCollection users = rootWeb.AllUsers;
users.Add("*****\\" + strUserName, "", "", "");
//给用户赋予权限
SPRoleDefinitionCollection roles = rootWeb.RoleDefinitions;
SPRoleDefinition role = roles["读取"];
SPUser user = users["*****\\" + strUserName];
SPRoleAssignment raUser = new SPRoleAssignment(user);
raUser.RoleDefinitionBindings.Add(role);
rootWeb.RoleAssignments.Add(raUser);
MessageBox.Show("添加成功");
//同样使用SPGroup也可以把用户加入到已经存在的组中去
我这边就是写死的赋予读取的权限,当然也可以把所有的角色列出来,自由选择。//添加用户到网站
SPWeb rootWeb = _siteCollection.OpenWeb("/");
SPUserCollection users = rootWeb.AllUsers;
users.Add("*****\\" + strUserName, "", "", "");
//给用户赋予权限
SPRoleDefinitionCollection roles = rootWeb.RoleDefinitions;
SPRoleDefinition role = roles["读取"];
SPUser user = users["*****\\" + strUserName];
SPRoleAssignment raUser = new SPRoleAssignment(user);
raUser.RoleDefinitionBindings.Add(role);
rootWeb.RoleAssignments.Add(raUser);
MessageBox.Show("添加成功");
//同样使用SPGroup也可以把用户加入到已经存在的组中去