jasminie

jasminie

  • NA
  • 78
  • 0

C#.net active directory options

Aug 29 2011 1:30 PM
I have the following questions to ask about a C#.net 2008 desktop application that i want to modify by accessing the active directory values:

1. I am assuming the following code accesses the active directory and only keeps one active directory group value at a time. if not, can you tell me what is wrong with my assupmption.

a. The following code is the start call:

void InitBrowser()
{
CurrentUser = new TUser();
UserIs_Read = CurrentUser.HasTRole(TUser.TRole.Reader);

}

b. The following is the code it calls;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Principal;

namespace T.Common
{
public class TUser
{
public enum TRole
{
User = 0,
Manager = 1,
Administrator = 2,
Reader =3
}

public WindowsIdentity Identity;
public WindowsPrincipal Principal;

string _Domain;
public string Domain
{
get { return _Domain; }
}

string _Username;
public string Username
{
get { return _Username; }
}

public TUser()
{
this.Identity = WindowsIdentity.GetCurrent();
string[] NameInfo = this.Identity.Name.Split('\\');
_Domain = NameInfo[0];
_Username = NameInfo[1];
}

public bool HasTUser(TRole Role)
{
switch (Role)
{
case TRole.Reader:
return IsInGroup("Reader");
case Reader.Manager:
return IsInGroup("Managers");
//break;
case EnrollTracRole.Administrator:
return IsInGroup("Administrators");
//break;
case EnrollTracRole.User:
return true;
//break;
default:
return false;
}
}

public bool IsInGroup(string GroupName)
{


if (this.Principal == null)
{
this.Principal = new WindowsPrincipal(this.Identity);
}

return this.Principal.IsInRole(GroupName);
}


2. Would I somehow benefit from the code below instead of using the code I listed above? (the code below is just a small part of the active directory logic I would be using) If so, can you tell me how the following code is better:



private String[] ADSearch(String ConnectionString, String filter, String field){

DirectoryEntry SearchRoot =

new DirectoryEntry(ConnectionString, _userName, _pwd);

DirectorySearcher searcher =

new DirectorySearcher (SearchRoot, filter);

{

SearchRoot,

Filter = filter,

PageSize = 100

};

seararcher.PropertiesToLoad.Clear();

searcher.PropertiesToLoad.Add(field);

try


{


using (SearchResultCollection results = searcher.FindAll())


{


List<string> r = new List<string>();

foreach (SearchResult searchResult in results)



{

var prop = searchResult.Properties[field];
for (int index = 0; index < prop.Count; index++)
r.Add(prop[index].ToString());
}
return r.Count > 0 ? r.ToArray() : new string[0];


}


}


catch (Exception ex)


{

throw new ProviderException("Unable to query Active Directory.", ex);


}


}

public bool ValidateUser(string username, string password)


{


bool result = false;


try

{


using (var context =

new PrincipalContext(ContextType.Machine,_domain, null, _userName, _pwd))

{

result = context.ValidateCredentials(username, password);

}

}

catch (Exception ex)

{

/ TODO: log exception

}

return result;


}

Answers (1)