Self Service Formular für das Active Directory Teil 2 17. Februar 2012

Nachdem das Formular für das Auslesen der Benutzerdaten funktioniert, muss jetzt die Logik für das Aktualisieren der Attribute im Active Directory implementiert werden. Dazu wird die bestehende Lösung um folgende Funktion erweitert:

 

private void SetADData(DirectoryEntry user)
         {
             if (txtSurname.Text != null)
             {
                 user.Properties["sn"].Value = txtSurname.Text.ToString();
             }
             if (txtPosition.Text != null)
             {
                 user.Properties["title"].Value = txtPosition.Text.ToString();
             }
             if (txtDepartment.Text != null)
             {
                 user.Properties["department"].Value = txtDepartment.Text.ToString();
             }
             user.CommitChanges();
 
         }

Diese Funktion prüft, ob in den Textfeldern Werte enthalten sind. Wenn Werte enthalten sind, dann werden diese in das Active Directory übertragen. Zusätzlich wird in das Klickevent des “Speichern” Buttons der Funktionsaufruf eingefügt:

protected void Button1_Click(object sender, EventArgs e)
         {
             SetADData(ADUser);
         }

 

Nach den Änderungen sieht der komplette Quellcode der Webseite so aus:

 

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.DirectoryServices;
 
namespace ITeach_ADSelfService
{
    public partial class _Default : System.Web.UI.Page
    {
        const string LDAP = "LDAP://dc=spielwiese,dc=intern"; //Anzupassen!
        static DirectoryEntry ADUser;
        private readonly string[] arrProperties = new string[] { "department","sn", "title"};
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
            }
            else
            {
                string strUserName = GetCurrentWindowsUserLogin().ToString();
                ADUser = GetUser(strUserName);
                GetADData(ADUser);
            }
 
        }
 
        private string GetCurrentWindowsUserLogin()
        //Diese Funktion ermittelt fuer uns den aktuellen Benutzernamen damit wir die Suche durchfuehren können
        {
            string strSamAccountName = "";
            string login = Page.User.Identity.Name;
            int intLogin = login.IndexOf(@"\");
            if (intLogin > 0)
            {
              strSamAccountName = login.Remove(0, intLogin + 1);
            }
            return strSamAccountName;
        }
        private DirectoryEntry GetUser(string loginName)
        {
            string strSearchfilter = "(SamAccountName=" + loginName + ")";
 
            DirectoryEntry entry = new DirectoryEntry(LDAP);
 
            System.DirectoryServices.DirectorySearcher search = new System.DirectoryServices.DirectorySearcher(entry, strSearchfilter, arrProperties);
            DirectoryEntry user = null;
            user = new DirectoryEntry(search.FindOne().Path.ToString());
            return user;
        }
         private void GetADData(DirectoryEntry user)
         {
              if (user.Properties["sn"].Value != null)
              {
                  txtSurname.Text = user.Properties["sn"].Value.ToString();
              }
              else
              {
                  txtSurname.Text = "";
              }
              if (user.Properties["department"].Value != null)
              {
                  txtDepartment.Text = user.Properties["department"].Value.ToString();
              }
              else
              {
                  txtDepartment.Text = "";
              }
              if (user.Properties["title"].Value != null)
              {
                  txtPosition.Text = user.Properties["title"].Value.ToString();
 
              }
              else
              {
                  txtPosition.Text = "";
              }
 
         }
         private void SetADData(DirectoryEntry user)
         {
             if (txtSurname.Text != null)
             {
                 user.Properties["sn"].Value = txtSurname.Text.ToString();
             }
             if (txtPosition.Text != null)
             {
                 user.Properties["title"].Value = txtPosition.Text.ToString();
             }
             if (txtDepartment.Text != null)
             {
                 user.Properties["department"].Value = txtDepartment.Text.ToString();
             }
             user.CommitChanges();
 
         }
 
         protected void Button1_Click(object sender, EventArgs e)
         {
             SetADData(ADUser);
         }
 
    }
}

 

Folgende Punkte müssten noch verfeinert werden:

  • Fehlerbehandlung (was soll passieren, wenn das Speichern fehlschlägt)
  • Erweiterte / verbesserte Überprüfung der Eingabedaten. Eventuell per AJAX Warnungen bzw. Hinweise für den Benutzer einblenden.

Der zweite Teil kann hier heruntergeladen werden (ITeach-ADSelfService-Teil2 (997))

Self Service Formular für das Active Directory Teil 1

Self Service Formular für das Active Directory Teil 3

Self Service Formular für das Active Directory Teil 4

Leave a Reply

*