using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.DirectoryServices;
using ActiveDs;
using System.Text;
using System.Data.SqlClient;
using System.Security.Principal;
namespace ACDR
{
public class domain : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnadd;
protected System.Web.UI.WebControls.Button btnremove;
protected System.Web.UI.WebControls.Button btnsave;
protected System.Web.UI.WebControls.ListBox lstall;
protected System.Web.UI.WebControls.ListBox lstgroup;
protected System.Web.UI.WebControls.DropDownList DrpGroup;
private void Page_Load(object sender, System.EventArgs e)
{
//DirectoryEntry de=new DirectoryEntry("LDAP://DC=aopen,DC=com");
if (Session["Uid"]==null)
{
//Response.Write(Session["Uid"]);
Response.Redirect("logon.aspx");
}
DirectoryEntry domain = new DirectoryEntry("LDAP://DC=Hipro,DC=com");
//int usr=(int) domain.Properties[""]
if(!Page.IsPostBack)
{
// string tab = " ";
// foreach(string key in domain.Properties.PropertyNames)
// {
// Response.Write(tab + key + " = ");
// }
//groups
//
btnadd.Enabled=false;
btnremove.Enabled=false;
btnsave.Enabled=false;
DirectorySearcher src = new DirectorySearcher(domain,"(objectCategory=group)");
//int val = (int) (ActiveDs.ADS_GROUP_TYPE_ENUM.ADS_GROUP_TYPE_GLOBAL_GROUP);
//string query = "(&(objectCategory=group)(groupType:1.2.840.113556.1.4.804:=" + val.ToString() + "))";
int val = (int) (ActiveDs.ADS_GROUP_TYPE_ENUM.ADS_GROUP_TYPE_GLOBAL_GROUP| ActiveDs.ADS_GROUP_TYPE_ENUM.ADS_GROUP_TYPE_SECURITY_ENABLED);
string query = "(&(objectCategory=group)(groupType=" + val.ToString() + "))";
src.Filter = query;
ListItem item=new ListItem("","");
DrpGroup.Items.Add(item);
foreach(SearchResult res in src.FindAll())
{
//Response.Write(res.Path);
string strFilter="I";
DirectoryEntry group = new DirectoryEntry(res.Path);
if(group.Properties["sAMAccountName"].Value.ToString().ToUpper().IndexOf(strFilter)>=0)
{
item=new ListItem(group.Properties["sAMAccountName"].Value.ToString(),res.Path);
DrpGroup.Items.Add(item);
}
}
//users
DirectorySearcher dirsearcher = new DirectorySearcher(domain);
//dirsearcher.Filter = ("(objectclass = user)");
dirsearcher.Filter ="(&(objectclass=user)(objectcategory=person))";
dirsearcher.SearchScope = SearchScope.Subtree;
dirsearcher.Sort =new SortOption("sAMAccountName", SortDirection.Ascending ); //Sort by Name
foreach (SearchResult result in dirsearcher.FindAll())
{
DirectoryEntry de = result.GetDirectoryEntry();
//sb.Append("UserName: ");
item=new ListItem(de.Properties["sAMAccountName"].Value.ToString(),de.Path);
lstall.Items.Add(item);
//sb.Append("<br />");
}
}
}
#region Web Form 設計工具產生的程式碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 此為 ASP.NET Web Form 設計工具所需的呼叫。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 此為設計工具支援所必須的方法 - 請勿使用程式碼編輯器修改
/// 這個方法的內容。
/// </summary>
private void InitializeComponent()
{
this.DrpGroup.SelectedIndexChanged += new System.EventHandler(this.DrpGroup_SelectedIndexChanged);
this.btnsave.Click += new System.EventHandler(this.btnsave_Click);
this.btnadd.Click += new System.EventHandler(this.btnadd_Click);
this.btnremove.Click += new System.EventHandler(this.btnremove_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void DrpGroup_SelectedIndexChanged(object sender, System.EventArgs e)
{
lstgroup.Items.Clear();
if(DrpGroup.SelectedIndex!=0)
{
btnadd.Enabled=true;
btnremove.Enabled=true;
btnsave.Enabled=true;
DirectoryEntry group = new DirectoryEntry(DrpGroup.SelectedValue);
object members = group.Invoke("members",null);
ListItem item;
foreach( object member in (IEnumerable) members)
{
DirectoryEntry x = new DirectoryEntry(member);
item=new ListItem(x.Properties["sAMAccountName"].Value.ToString(),x.Path);
lstgroup.Items.Add(item);
}
}
else
{
btnadd.Enabled=false;
btnremove.Enabled=false;
btnsave.Enabled=false;
}
}
private void btnadd_Click(object sender, System.EventArgs e)
{
bool Flg=true;
int j;
foreach(ListItem item in lstall.Items)
{
if(item.Selected)
{
Flg=true;
for (j=0;j<= lstgroup.Items.Count-1;j++)
{
if (lstgroup.Items[j].Value==item.Value)//如果右邊框已經有選中的item則不添加過去,沒有則添加過去
{
Flg=false;
break;
}
}
if(Flg==true){
lstgroup.Items.Add(new ListItem (item.Text,item.Value));}
}
}
}
private void btnremove_Click(object sender, System.EventArgs e)
{
int count=lstgroup.Items.Count;
int i=count-1;
while(i>-1)
{
ListItem item=lstgroup.Items[i];
if(item.Selected)
{
lstgroup.Items.RemoveAt(i);
}
i=i-1;
}
}
//保存users到group
private void btnsave_Click(object sender, System.EventArgs e)
{
//remove users from group
if(DrpGroup.SelectedIndex!=0)
{
try
{
DirectoryEntry group= new DirectoryEntry(DrpGroup.SelectedValue,"Administrator","");
object members = group.Invoke("members",null);
foreach( object member in (IEnumerable) members)
{
DirectoryEntry x = new DirectoryEntry(member);
String userDN = x.Properties["distinguishedName"].Value.ToString();
group.Properties["member"].Remove(userDN);
group.CommitChanges();
}
//add users
foreach(ListItem item in lstgroup.Items)
{
DirectoryEntry x = new DirectoryEntry(item.Value);
group.Properties["member"].Add(x.Properties["distinguishedName"].Value);
//Commit the changes to the directory.
group.CommitChanges();
}
Response.Write("<script>alert('AD Account Modify Success!');</script>");
}
catch(Exception ex)
{
//Response.Write(ex.ToString() );
Response.Write("<script>alert('AD Account Modify Fail,Pls Contact Your Administrator Error:'+ '" + ex.Message+"');</script>");
//throw new Exception( ex.Message);
}
}
}
}
}