using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.ActiveDirectory;
public partial class Admin :
System.Web.UI.Page
{
    Common common = new
Common();
    protected void
Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
               
//Getting the Current user name
               
string username = common.ExtractUserName(User.Identity.Name);
               
UserPrincipal user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), IdentityType.SamAccountName,
username);
               
ArrayList adminGroups =
common.GetAdminGroups();//Get the Admin Groups
               
ArrayList groups =
common.getGroupsByPrincipal(user);//Get the User
Groups
               
groups.Add(user.DisplayName.ToLower().Trim());
               
groups.Add(user.SamAccountName.ToLower().Trim());
               
getUsersAndGroup();
               
bool redirect = true;
//Check wheather user is admin or not
               
if (adminGroups.Count > 0)
               
{
                   
foreach (string
adminGroup in adminGroups)
                   
{
                        if (groups.Contains(adminGroup))
                        {
                            redirect = false;
                            break;
                        }
                   
}
                   
if (redirect)
                    {
                        Response.Redirect("Default.aspx", true);
                   
}
               
}
        }
    }
    private void getUsersAndGroup()
    {
        try
        {
            ArrayList allUsers = this.getAllUsers();
            ArrayList allGroups = this.getAllGroups();
            DataTable dtGroups = new
DataTable();
           
dtGroups.Columns.Add("Groups");
            for (int i = 0; i < allGroups.Count; i++)
            {
               
DataRow row = dtGroups.NewRow();
               
row[0] = allGroups[i];
               
dtGroups.Rows.Add(row);
            }
           
ddlGroup.DataSource = dtGroups;
            ddlGroup.DataTextField = "Groups";
           
ddlGroup.DataValueField = "Groups";
           
ddlGroup.DataBind();
        }
        catch (Exception
ex)
        {
            ErrorLog.Log(ex);
        }
    }
    public DataTable
getUsers(string username)
    {
        DataTable dtUsers = new
DataTable();
       
dtUsers.Columns.Add("users");
        try
        {
            // create domain context
            PrincipalContext ctx = new
PrincipalContext(ContextType.Domain);
            // fetch your group
            GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx,
username);
            // enumerate over the group's members
            foreach (Principal
p in group.Members)
            {
               
DataRow row = dtUsers.NewRow();
               
row[0] = p.Name;
               
dtUsers.Rows.Add(row);
               
//Console.WriteLine("Principal '{0}',
type '{1}'", p.Name, p.StructuralObjectClass);
            }
        }
        catch (Exception
ex)
        {
            ErrorLog.Log(ex);
        }
        return dtUsers;
    }
    private ArrayList
getAllUsers()
    {
        return getADObjectsForClass("User");
    }
    private ArrayList
getAllGroups()
    {
        return getADObjectsForClass("Group");
    }
    private ArrayList
getADObjectsForClass(string objectClass)
    {
        ArrayList list = new
ArrayList();
        try
        {
            DirectoryEntry dirEntry = new
DirectoryEntry("LDAP://"
+ System.Configuration.ConfigurationManager.AppSettings["DomainName"]); //Enter
the domain name here
            DirectorySearcher dirSearcher = new DirectorySearcher();
           
dirSearcher.SearchRoot = dirEntry;
           
dirSearcher.Filter = "(objectClass="
+ objectClass + ")";
           
dirSearcher.PropertiesToLoad.Add("cn");
            SearchResultCollection res =
dirSearcher.FindAll();
            foreach (SearchResult
objectUnit in res)
            {
               
list.Add(objectUnit.Properties["cn"][0].ToString());
            }
        }
        catch (Exception
ex)
        {
            ErrorLog.Log(ex);
        }
        return list;
    }
}