00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Collections.Generic;
00014 using System.Diagnostics;
00015 using System.DirectoryServices;
00016 using Mcs.Epm.MicrosoftProject.mpFx.SecurityWebService;
00017
00018 namespace Mcs.Epm.MicrosoftProject.mpFx
00019 {
00020
00021
00022
00023 public class Groups
00024 {
00025 #region Instance Data
00026
00027 private Dictionary<Guid, string> _Groups;
00028
00029 #endregion
00030
00031 #region Constructors
00032
00033 protected internal Groups(Security parent)
00034 {
00035 Parent = parent;
00036 }
00037
00038 #endregion
00039
00040 #region Internal Properties
00041
00042 protected internal Security Parent { get; protected set; }
00043
00044 #endregion
00045
00046 #region Public Methods
00047
00048
00049
00050
00051 public Dictionary<Guid, string> GetGroupsList(bool refresh)
00052 {
00053 if (_Groups == null || refresh)
00054 {
00055 _Groups = new Dictionary<Guid, string>();
00056
00057 using (SecurityGroupsDataSet securityGroupsDataSet = Parent.Parent.WebServices.Security.ReadGroupList())
00058 {
00059 foreach (SecurityGroupsDataSet.SecurityGroupsRow group in securityGroupsDataSet.SecurityGroups.Rows)
00060 {
00061 _Groups.Add(group.WSEC_GRP_UID, group.WSEC_GRP_NAME);
00062 }
00063 }
00064 }
00065
00066 return _Groups;
00067 }
00068
00069 public Guid this[string name]
00070 {
00071 get
00072 {
00073 if (_Groups == null)
00074 {
00075 GetGroupsList(true);
00076 }
00077
00078 if (_Groups != null)
00079 {
00080 if (_Groups.ContainsValue(name))
00081 {
00082 foreach (KeyValuePair<Guid, string> pair in _Groups)
00083 {
00084 Debug.WriteLine(pair.Value);
00085 if (pair.Value != null && pair.Value.Equals(name, StringComparison.CurrentCultureIgnoreCase))
00086 {
00087 return pair.Key;
00088 }
00089 }
00090 }
00091 }
00092
00093 return Guid.Empty;
00094 }
00095 }
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 public void CreateGroup(Guid groupGuid,
00106 string name,
00107 string description,
00108 string adGroupName,
00109 Guid adGroupGuid)
00110 {
00111 using (SecurityGroupsDataSet securityGroupsDataSet = new SecurityGroupsDataSet())
00112 {
00113 SecurityGroupsDataSet.SecurityGroupsRow group = securityGroupsDataSet.SecurityGroups.NewSecurityGroupsRow();
00114
00115 group.WSEC_GRP_UID = groupGuid;
00116 group.WSEC_GRP_NAME = name;
00117 group.WSEC_GRP_DESC = description;
00118 group.WSEC_GRP_AD_GROUP = adGroupName;
00119
00120 if (adGroupGuid != Guid.Empty)
00121 {
00122 group.WSEC_GRP_AD_GUID = adGroupGuid;
00123 }
00124
00125 securityGroupsDataSet.SecurityGroups.AddSecurityGroupsRow(group);
00126
00127 Parent.Parent.WebServices.Security.CreateGroups(securityGroupsDataSet);
00128 }
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140 public void CreateGroup(Guid groupGuid,
00141 string name,
00142 string description,
00143 string adGroupName,
00144 Guid adGroupGuid,
00145 Guid[] resourceGuids)
00146 {
00147 CreateGroup(groupGuid, name, description, adGroupName, adGroupGuid);
00148 AddResourcesToGroup(groupGuid, resourceGuids);
00149 }
00150
00151
00152
00153
00154
00155
00156 public void AddResourcesToGroup(Guid groupGuid,
00157 Guid[] resourceGuids)
00158 {
00159 if (groupGuid == Guid.Empty || !_Groups.ContainsKey(groupGuid))
00160 {
00161 throw new ArgumentException("Invalid group");
00162 }
00163
00164 using (SecurityGroupsDataSet securityGroupsDataSet = Parent.Parent.WebServices.Security.ReadGroup(groupGuid))
00165 {
00166 foreach (Guid resourceGuid in resourceGuids)
00167 {
00168 if (securityGroupsDataSet.GroupMembers.FindByRES_UIDWSEC_GRP_UID(resourceGuid, groupGuid) == null)
00169 {
00170 SecurityGroupsDataSet.GroupMembersRow groupMembership = securityGroupsDataSet.GroupMembers.NewGroupMembersRow();
00171
00172 groupMembership.RES_UID = resourceGuid;
00173 groupMembership.WSEC_GRP_UID = groupGuid;
00174
00175 securityGroupsDataSet.GroupMembers.AddGroupMembersRow(groupMembership);
00176 }
00177 }
00178
00179 Parent.Parent.WebServices.Security.SetGroups(securityGroupsDataSet);
00180 }
00181 }
00182
00183
00184
00185
00186
00187 public Dictionary<string, Guid> GetADGroups()
00188 {
00189 DirectorySearcher directorySearcher = new DirectorySearcher {Filter = "(&(objectCategory=group))", SearchScope = SearchScope.Subtree};
00190
00191 directorySearcher.PropertiesToLoad.Add("name");
00192 directorySearcher.PropertiesToLoad.Add("objectGUID");
00193
00194 SearchResultCollection searchResultCollection = directorySearcher.FindAll();
00195
00196 Dictionary<string, Guid> results = new Dictionary<string, Guid>();
00197
00198 foreach (SearchResult result in searchResultCollection)
00199 {
00200 Debug.Assert(result.Properties["name"].Count == 1 && result.Properties["objectGUID"].Count == 1);
00201
00202 results.Add(result.Properties["name"][0].ToString(), new Guid((byte[]) result.Properties["objectGUID"][0]));
00203 }
00204
00205 return results;
00206 }
00207
00208 #endregion
00209
00210 }
00211 }