TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
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;
}
Reply
Answers (
1
)
Next Button
Deleting the textbox