人无信不立/2008-04-26 22:30

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


        }

这里注意的是连接AD时的Path后面的两个DC表示AD的域名,
CNCommon Name(公用名称)的缩写。 AD中的Users
OU
Organizational Unit(组织单元)的缩写, AD中的Domain Controllers

接下来通过对象模型把用户加到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也可以把用户加入到已经存在的组中去
我这边就是写死的赋予读取的权限,当然也可以把所有的角色列出来,自由选择。

演示例子下载

posted @ 2007-03-20 17:04 永春 阅读(1288) 评论(4)  编辑 收藏 所属分类: SharePoint

  回复  引用  查看    
#1楼 2007-03-22 17:11 | 笑煞天      
不错,谢谢
  回复  引用    
#2楼 2007-04-25 10:21 | Wellie [未注册用户]
问楼主一个问题,能否通过SDK知道Sharepoint采用的是那种认证方式(sharepoint有3中认证吧,AD认证,主机认证,Form认证),我正在学习这方面的知识。谢谢。
  回复  引用    
#3楼 2007-04-25 13:12 | GSpring [未注册用户]
水鱼小白 刚写了一篇文章:Sharepoint2007网站的认证方式的确认,http://www.cnblogs.com/gzbwl99/archive/2007/04/25/726496.html
应该正是你想问的-_-
  回复  引用  查看    
#4楼 2008-04-29 23:57 | 西煞魄工人      
AD中如果用户区多,取用户时会很慢的。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-20 17:19 编辑过


相关链接: