MOSS的用户配置文件及其管理

上一篇讲到了一个组织层次结构与AD同步的问题。实际上,我们还可以深入地了解一下有关用户配置的细节。

MOSS的共享服务可以帮我们保存所谓的用户配置文件。这些信息默认包含以下.黑色粗体字的部分是可以编辑的

  • 显示名称:Id , 代码名称:UserProfile_GUID, 是否可以编辑? : False
  • 显示名称:SID , 代码名称:SID, 是否可以编辑? : False
  • 显示名称:Active Directory ID , 代码名称:ADGuid, 是否可以编辑? : False
  • 显示名称:帐户名 , 代码名称:AccountName, 是否可以编辑? : False
  • 显示名称:姓氏 , 代码名称:LastName, 是否可以编辑? : False
  • 显示名称:名字 , 代码名称:FirstName, 是否可以编辑? : False
  • 显示名称:名称 , 代码名称:PreferredName, 是否可以编辑? : False
  • 显示名称:单位电话 , 代码名称:WorkPhone, 是否可以编辑? : False
  • 显示名称:办公室 , 代码名称:Office, 是否可以编辑? : False
  • 显示名称:部门 , 代码名称:Department, 是否可以编辑? : False
  • 显示名称:职务 , 代码名称:Title, 是否可以编辑? : False
  • 显示名称:经理 , 代码名称:Manager, 是否可以编辑? : False
  • 显示名称:描述 , 代码名称:AboutMe, 是否可以编辑? : True
  • 显示名称:个人网站 , 代码名称:PersonalSpace, 是否可以编辑? : False
  • 显示名称:图片 , 代码名称:PictureURL, 是否可以编辑? : True
  • 显示名称:用户名 , 代码名称:UserName, 是否可以编辑? : False
  • 显示名称:快速链接 , 代码名称:QuickLinks, 是否可以编辑? : False
  • 显示名称:网站 , 代码名称:WebSite, 是否可以编辑? : False
  • 显示名称:公共网站重定向 , 代码名称:PublicSiteRedirect, 是否可以编辑? : False
  • 显示名称:非直属经理 , 代码名称:SPS-Dotted-line, 是否可以编辑? : False
  • 显示名称:同级 , 代码名称:SPS-Peers, 是否可以编辑? : False
  • 显示名称:职责 , 代码名称:SPS-Responsibility, 是否可以编辑? : True
  • 显示名称:技能 , 代码名称:SPS-Skills, 是否可以编辑? : True
  • 显示名称:过去参与的项目 , 代码名称:SPS-PastProjects, 是否可以编辑? : True
  • 显示名称:兴趣 , 代码名称:SPS-Interests, 是否可以编辑? : True
  • 显示名称:学校 , 代码名称:SPS-School, 是否可以编辑? : True
  • 显示名称:SIP 地址 , 代码名称:SPS-SipAddress, 是否可以编辑? : False
  • 显示名称:生日 , 代码名称:SPS-Birthday, 是否可以编辑? : True
  • 显示名称:我的网站升级 , 代码名称:SPS-MySiteUpgrade, 是否可以编辑? : True
  • 显示名称:“不建议”列表 , 代码名称:SPS-DontSuggestList, 是否可以编辑? : True
  • 显示名称:代理服务器地址 , 代码名称:SPS-ProxyAddresses, 是否可以编辑? : False
  • 显示名称:雇用日期 , 代码名称:SPS-HireDate, 是否可以编辑? : True
  • 显示名称:上一个添加的同事 , 代码名称:SPS-LastColleagueAdded, 是否可以编辑? : True
  • 显示名称:Outlook Web Access URL , 代码名称:SPS-OWAUrl, 是否可以编辑? : True
  • 显示名称:资源林 SID , 代码名称:SPS-ResourceSID, 是否可以编辑? : False
  • 显示名称:资源林帐户名 , 代码名称:SPS-ResourceAccountName, 是否可以编辑? : False
  • 显示名称:主帐户名 , 代码名称:SPS-MasterAccountName, 是否可以编辑? : False
  • 显示名称:助手 , 代码名称:Assistant, 是否可以编辑? : True
  • 显示名称:工作电子邮件 , 代码名称:WorkEmail, 是否可以编辑? : False
  • 显示名称:移动电话 , 代码名称:CellPhone, 是否可以编辑? : True
  • 显示名称:传真 , 代码名称:Fax, 是否可以编辑? : True
  • 显示名称:住宅电话 , 代码名称:HomePhone, 是否可以编辑? : True

 

那么,为什么需要所谓的用户配置文件呢?这主要是为了跨程序之间可以共享一些设置,例如用户对于网站主题的选择,颜色的选择等等。

除了以上内置的属性之外,我们还可以自定义属性

image

这个机制与ASP.NET内置的那个Profile机制很类似。添加好之后,大致如下(请注意,最后一行是我们添加到自定义属性)

image

那么,如何在代码里面检索这些属性呢?

using Microsoft.Office.Server;
using Microsoft.Office.Server.Administration;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;

//需要添加到引用是Microsoft.SharePoint.dll,Microsoft.Office.Server

using (SPSite site = new SPSite(txtSite.Text))//如果在webpart里面,则可以用SPContext.Current.Site取得当前的站点
{
    ServerContext context = ServerContext.GetContext(site);
    UserProfileManager profiles = new UserProfileManager(context);

    string useraccount = @"XIZHANG\Administrator";
    if (profiles.UserExists(useraccount))
    {
        UserProfile profile = profiles.GetUserProfile(useraccount);
        foreach (Property property in profiles.Properties)
        {

            if (property != null)
            {
                richTextBox1.AppendText("显示名称:"+property.DisplayName + " , 代码名称:" + property.Name + ", 是否可以编辑? : " +property.IsUserEditable+"\n");
            }
        }

    }
}

常见的一些场景,例如

1. 读取经理

profile["Manager"].Value.ToString()

2. 读取邮件地址

profile["WorkEmail"].Value.ToString()

 

 

以上可以实现对于属性的读取,那么如何写入属性呢?

profile["Color"].Value = "绿色";
profile.Commit();

 

需要特别注意的是,如果更改了AD里面的信息,并不会立即反映在配置文件中。因为配置文件其实与AD没有在一起。需要配置导入策略。

moss 中读取AD域用户信息的方法总结
2010-05-19 14:46

在moss环境下,读取域用户信息,经过查资料,终于很容易就读出Ad域用户的指定属性信息,很简单,代码如下:

//获取目录中需要的组织单元(OU)
        public string GetHomePageByGetAllOU(string curUserName)
        {
            string aa = "/";
             DirectoryEntry entry = new DirectoryEntry("LDAP://" + domainName, "msdev\\Administrator", "123456!", AuthenticationTypes.Secure);
             DirectorySearcher mySearcher = new DirectorySearcher(entry);
            mySearcher.Filter = ("(objectClass=user)");

            foreach (SearchResult resEnt in mySearcher.FindAll())
            {
                if (resEnt.GetDirectoryEntry() != null && resEnt.GetDirectoryEntry().Properties["sAMAccountName"].Value.ToString().Trim() == curUserName.Trim())

原文地址:https://www.cnblogs.com/IsNull/p/1878622.html