00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Collections.Generic;
00014 using Mcs.Epm.MicrosoftProject.mpFx.ResourcesWebService;
00015 using Mcs.Epm.MicrosoftProject.mpFx.SecurityWebService;
00016 using Microsoft.Office.Project.Server.Library;
00017
00018 namespace Mcs.Epm.MicrosoftProject.mpFx
00019 {
00020
00021
00022
00023 public class Security
00024 {
00025 #region Static Methods
00026
00027 #endregion
00028
00029 #region Instance Data
00030
00031 private Groups _Groups;
00032 private Dictionary<Guid, string> _Categories;
00033 private Dictionary<Guid, List<object>> _OrganizationalPermissions;
00034 private Dictionary<string, Dictionary<Guid, List<object>>> _CategoryPermissions;
00035 private Dictionary<string, Dictionary<Guid, List<object>>> _GlobalPermissions;
00036 private Dictionary<Guid, string> _Templates;
00037
00038 #endregion
00039
00040 #region Constructor
00041
00042
00043
00044
00045
00046 public Security(ProjectServer parent)
00047 {
00048 if (parent == null)
00049 {
00050 throw new ArgumentNullException( );
00051 }
00052
00053 Parent = parent;
00054 }
00055
00056 #endregion
00057
00058 #region Public Properties
00059
00060 public Groups Groups
00061 {
00062 get
00063 {
00064 if (_Groups == null)
00065 {
00066 _Groups = new Groups(this);
00067 }
00068 return _Groups;
00069 }
00070 }
00071
00072
00073
00074
00075 public Dictionary<Guid, string> Categories
00076 {
00077 get
00078 {
00079 if (_Categories == null)
00080 {
00081 _Categories = new Dictionary<Guid, string>();
00082
00083 using (SecurityCategoriesDataSet categoriesDataSet = Parent.WebServices.Security.ReadCategoryList())
00084 {
00085 foreach (SecurityCategoriesDataSet.SecurityCategoriesRow category in categoriesDataSet.SecurityCategories)
00086 {
00087 _Categories.Add(category.WSEC_CAT_UID, category.WSEC_CAT_NAME);
00088 }
00089 }
00090 }
00091
00092 return _Categories;
00093 }
00094 }
00095
00096
00097
00098
00099 public Dictionary<string, Dictionary<Guid, List<object>>> CategoryPermissions
00100 {
00101 get
00102 {
00103 if (_CategoryPermissions == null)
00104 {
00105 _CategoryPermissions = new Dictionary<string, Dictionary<Guid, List<object>>>();
00106
00107 using (PermissionDataSet permissionDataSet = Parent.WebServices.Security.ReadCategoryPermissions())
00108 {
00109 UnpackPermissions(_CategoryPermissions, permissionDataSet);
00110 }
00111 }
00112
00113 return _CategoryPermissions;
00114 }
00115 }
00116
00117
00118
00119
00120 public Dictionary<string, Dictionary<Guid, List<object>>> GlobalPermissions
00121 {
00122 get
00123 {
00124 if (_GlobalPermissions == null)
00125 {
00126 _GlobalPermissions = new Dictionary<string, Dictionary<Guid, List<object>>>();
00127
00128 using (PermissionDataSet permissionDataSet = Parent.WebServices.Security.ReadGlobalPermissions())
00129 {
00130 UnpackPermissions(_GlobalPermissions, permissionDataSet);
00131 }
00132 }
00133
00134 return _GlobalPermissions;
00135 }
00136 }
00137
00138
00139
00140
00141 public Dictionary<string, Dictionary<Guid, List<object>>> OrganizationalPermissions
00142 {
00143 get
00144 {
00145 if (_OrganizationalPermissions == null)
00146 {
00147 _OrganizationalPermissions = new Dictionary<Guid, List<object>>();
00148
00149 using (SecurityOrganizationalPermissionsDataSet permissionDataSet = Parent.WebServices.Security.ReadOrganizationalPermissions())
00150 {
00151 foreach (SecurityOrganizationalPermissionsDataSet.SecurityOrganizationalPermissionsRow permission in
00152 permissionDataSet.SecurityOrganizationalPermissions.Rows)
00153 {
00154 if (permission != null)
00155 {
00156 _OrganizationalPermissions.Add(permission.WSEC_FEA_ACT_UID, new List<object>());
00157
00158 _OrganizationalPermissions[permission.WSEC_FEA_ACT_UID].Add(permission.WSEC_ALLOW);
00159
00160 if (permission.IsWSEC_ACTION_NAMENull())
00161 {
00162 _OrganizationalPermissions[permission.WSEC_FEA_ACT_UID].Add(string.Empty);
00163 }
00164 else
00165 {
00166 _OrganizationalPermissions[permission.WSEC_FEA_ACT_UID].Add(permission.WSEC_ACTION_NAME);
00167 }
00168
00169 if (permission.IsWSEC_FEA_ACT_PARENTNull())
00170 {
00171 _OrganizationalPermissions[permission.WSEC_FEA_ACT_UID].Add(string.Empty);
00172 }
00173 else
00174 {
00175 _OrganizationalPermissions[permission.WSEC_FEA_ACT_UID].Add(permission.WSEC_FEA_ACT_PARENT);
00176 }
00177
00178 if (permission.IsWSEC_FEATURE_NAMENull())
00179 {
00180 _OrganizationalPermissions[permission.WSEC_FEA_ACT_UID].Add(string.Empty);
00181 }
00182 else
00183 {
00184 _OrganizationalPermissions[permission.WSEC_FEA_ACT_UID].Add(permission.WSEC_FEATURE_NAME);
00185 }
00186 }
00187 }
00188 }
00189 }
00190
00191 return _GlobalPermissions;
00192 }
00193 }
00194
00195
00196
00197
00198 public Dictionary<Guid, string> Templates
00199 {
00200 get
00201 {
00202 if (_Templates == null)
00203 {
00204 _Templates = new Dictionary<Guid, string>();
00205
00206 using (SecurityTemplatesDataSet securityTemplatesDataSet = Parent.WebServices.Security.ReadTemplateList())
00207 {
00208 foreach (SecurityTemplatesDataSet.SecurityTemplatesRow securityTemplate in securityTemplatesDataSet.SecurityTemplates.Rows)
00209 {
00210 _Templates.Add(securityTemplate.WSEC_TMPL_UID, securityTemplate.WSEC_TMPL_NAME);
00211
00212 }
00213 }
00214 }
00215
00216 return _Templates;
00217 }
00218 }
00219
00220 #endregion
00221
00222 #region Internal Properties
00223
00224 protected internal ProjectServer Parent { get; private set; }
00225
00226 #endregion
00227
00228 #region Public Methods
00229
00230 #region Category Methods
00231
00232
00233
00234
00235
00236
00237
00238 public void CreateCategory(Guid categoryGuid,
00239 string name,
00240 string description)
00241 {
00242 using (SecurityCategoriesDataSet categoriesDataSet = new SecurityCategoriesDataSet())
00243 {
00244 SecurityCategoriesDataSet.SecurityCategoriesRow category = categoriesDataSet.SecurityCategories.NewSecurityCategoriesRow();
00245
00246 category.WSEC_CAT_UID = categoryGuid;
00247 category.WSEC_CAT_NAME = name;
00248 category.WSEC_CAT_DESC = description;
00249
00250 categoriesDataSet.SecurityCategories.AddSecurityCategoriesRow(category);
00251
00252 Parent.WebServices.Security.CreateCategories(categoriesDataSet);
00253 }
00254 }
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 public void CreateCategory(Guid categoryGuid,
00270 string name,
00271 string description,
00272 Guid[] projects,
00273 Guid[] resources,
00274 Guid[] views,
00275 Dictionary<Guid, List<Permission>> userPermissions,
00276 Dictionary<Guid, List<Permission>> groupPermissions,
00277 ProjectSecurityRules[] projectSecurityRules,
00278 ResourceSecurityRules[] resourceSecurityRules)
00279 {
00280 using (SecurityCategoriesDataSet categoriesDataSet = new SecurityCategoriesDataSet())
00281 {
00282 SecurityCategoriesDataSet.SecurityCategoriesRow category = categoriesDataSet.SecurityCategories.NewSecurityCategoriesRow();
00283
00284 category.WSEC_CAT_UID = categoryGuid;
00285 category.WSEC_CAT_NAME = name;
00286 category.WSEC_CAT_DESC = description;
00287
00288 categoriesDataSet.SecurityCategories.AddSecurityCategoriesRow(category);
00289
00290 Parent.WebServices.Security.CreateCategories(categoriesDataSet);
00291
00292 SetCategoryProjects(categoriesDataSet, categoryGuid, projects);
00293
00294 SetCategoryResources(categoriesDataSet, categoryGuid, resources);
00295
00296 SetCategoryViews(categoriesDataSet, categoryGuid, views);
00297
00298 SetCategoryUserPermissions(categoriesDataSet, categoryGuid, userPermissions);
00299
00300 SetCategoryGroupPermissions(categoriesDataSet, categoryGuid, groupPermissions);
00301
00302 SetCategoryResourceRules(categoriesDataSet, categoryGuid, resourceSecurityRules);
00303
00304 SetCategoryProjectRules(categoriesDataSet, categoryGuid, projectSecurityRules);
00305
00306 Parent.WebServices.Security.SetCategories(categoriesDataSet);
00307 }
00308 }
00309
00310
00311
00312
00313
00314
00315
00316 public void SetCategoryProjectRules(SecurityCategoriesDataSet categoriesDataSet,
00317 Guid categoryGuid,
00318 ProjectSecurityRules[] projectSecurityRules)
00319 {
00320 foreach (ProjectSecurityRules rojectSecurityRule in projectSecurityRules)
00321 {
00322 SecurityCategoriesDataSet.SecurityCategoryRulesRow rule = categoriesDataSet.SecurityCategoryRules.NewSecurityCategoryRulesRow();
00323
00324 rule.WSEC_CAT_UID = categoryGuid;
00325 rule.WSEC_OBJ_RULE_TYPE = (int) rojectSecurityRule;
00326 rule.WSEC_OBJ_TYPE_UID = PSSecurityObjectType.Project;
00327
00328 categoriesDataSet.SecurityCategoryRules.AddSecurityCategoryRulesRow(rule);
00329 }
00330 }
00331
00332
00333
00334
00335
00336
00337
00338 public void SetCategoryResourceRules(SecurityCategoriesDataSet categoriesDataSet,
00339 Guid categoryGuid,
00340 ResourceSecurityRules[] resourceSecurityRules)
00341 {
00342 foreach (ResourceSecurityRules resourceSecurityRule in resourceSecurityRules)
00343 {
00344 SecurityCategoriesDataSet.SecurityCategoryRulesRow rule = categoriesDataSet.SecurityCategoryRules.NewSecurityCategoryRulesRow();
00345
00346 rule.WSEC_CAT_UID = categoryGuid;
00347 rule.WSEC_OBJ_RULE_TYPE = (int) resourceSecurityRule;
00348 rule.WSEC_OBJ_TYPE_UID = PSSecurityObjectType.Resource;
00349
00350 categoriesDataSet.SecurityCategoryRules.AddSecurityCategoryRulesRow(rule);
00351 }
00352 }
00353
00354
00355
00356
00357
00358
00359
00360 public void SetCategoryGroupPermissions(SecurityCategoriesDataSet categoriesDataSet,
00361 Guid categoryGuid,
00362 Dictionary<Guid, List<Permission>> groupPermissions)
00363 {
00364 foreach (KeyValuePair<Guid, List<Permission>> group in groupPermissions)
00365 {
00366 SecurityCategoriesDataSet.GroupRelationsRow groupRelation = categoriesDataSet.GroupRelations.NewGroupRelationsRow();
00367
00368 groupRelation.WSEC_GRP_UID = group.Key;
00369 groupRelation.WSEC_CAT_UID = categoryGuid;
00370
00371 categoriesDataSet.GroupRelations.AddGroupRelationsRow(groupRelation);
00372
00373 foreach (Permission permission in group.Value)
00374 {
00375 SecurityCategoriesDataSet.GroupPermissionsRow groupPermission = categoriesDataSet.GroupPermissions.NewGroupPermissionsRow();
00376
00377 groupPermission.WSEC_GRP_UID = group.Key;
00378 groupPermission.WSEC_CAT_UID = categoryGuid;
00379 groupPermission.WSEC_FEA_ACT_UID = permission.Guid;
00380
00381 if (permission.Allow)
00382 {
00383 groupPermission.WSEC_ALLOW = permission.Allow;
00384 }
00385
00386 if (permission.Deny)
00387 {
00388 groupPermission.WSEC_DENY = permission.Deny;
00389 }
00390
00391 categoriesDataSet.GroupPermissions.AddGroupPermissionsRow(groupPermission);
00392 }
00393 }
00394 }
00395
00396
00397
00398
00399
00400
00401
00402 public void SetCategoryUserPermissions(SecurityCategoriesDataSet categoriesDataSet,
00403 Guid categoryGuid,
00404 Dictionary<Guid, List<Permission>> userPermissions)
00405 {
00406 foreach (KeyValuePair<Guid, List<Permission>> user in userPermissions)
00407 {
00408 SecurityCategoriesDataSet.UserRelationsRow userRelation = categoriesDataSet.UserRelations.NewUserRelationsRow();
00409
00410 userRelation.RES_UID = user.Key;
00411 userRelation.WSEC_CAT_UID = categoryGuid;
00412
00413 categoriesDataSet.UserRelations.AddUserRelationsRow(userRelation);
00414
00415 foreach (Permission permission in user.Value)
00416 {
00417 SecurityCategoriesDataSet.UserPermissionsRow userPermission = categoriesDataSet.UserPermissions.NewUserPermissionsRow();
00418
00419 userPermission.RES_UID = user.Key;
00420 userPermission.WSEC_CAT_UID = categoryGuid;
00421 userPermission.WSEC_FEA_ACT_UID = permission.Guid;
00422
00423 if (permission.Allow)
00424 {
00425 userPermission.WSEC_ALLOW = permission.Allow;
00426 }
00427
00428 if (permission.Deny)
00429 {
00430 userPermission.WSEC_DENY = permission.Deny;
00431 }
00432
00433 categoriesDataSet.UserPermissions.AddUserPermissionsRow(userPermission);
00434 }
00435 }
00436 }
00437
00438
00439
00440
00441
00442
00443
00444 public void SetCategoryViews(SecurityCategoriesDataSet categoriesDataSet,
00445 Guid categoryGuid,
00446 Guid[] views)
00447 {
00448 foreach (Guid viewGuid in views)
00449 {
00450 SecurityCategoriesDataSet.SecurityCategoryObjectsRow categoryObject = categoriesDataSet.SecurityCategoryObjects.NewSecurityCategoryObjectsRow();
00451
00452 categoryObject.WSEC_CAT_UID = categoryGuid;
00453 categoryObject.WSEC_OBJ_TYPE_UID = PSSecurityObjectType.View;
00454 categoryObject.WSEC_OBJ_UID = viewGuid;
00455
00456 categoriesDataSet.SecurityCategoryObjects.AddSecurityCategoryObjectsRow(categoryObject);
00457 }
00458 }
00459
00460
00461
00462
00463
00464
00465
00466 public void SetCategoryResources(SecurityCategoriesDataSet categoriesDataSet,
00467 Guid categoryGuid,
00468 Guid[] resources)
00469 {
00470 foreach (Guid resourceGuid in resources)
00471 {
00472 SecurityCategoriesDataSet.SecurityCategoryObjectsRow categoryObject = categoriesDataSet.SecurityCategoryObjects.NewSecurityCategoryObjectsRow();
00473
00474 categoryObject.WSEC_CAT_UID = categoryGuid;
00475 categoryObject.WSEC_OBJ_TYPE_UID = PSSecurityObjectType.Resource;
00476 categoryObject.WSEC_OBJ_UID = resourceGuid;
00477
00478 categoriesDataSet.SecurityCategoryObjects.AddSecurityCategoryObjectsRow(categoryObject);
00479 }
00480 }
00481
00482
00483
00484
00485
00486
00487
00488 public void SetCategoryProjects(SecurityCategoriesDataSet categoriesDataSet,
00489 Guid categoryGuid,
00490 Guid[] projects)
00491 {
00492 foreach (Guid projectGuid in projects)
00493 {
00494 SecurityCategoriesDataSet.SecurityCategoryObjectsRow categoryObject = categoriesDataSet.SecurityCategoryObjects.NewSecurityCategoryObjectsRow();
00495
00496 categoryObject.WSEC_CAT_UID = categoryGuid;
00497 categoryObject.WSEC_OBJ_TYPE_UID = PSSecurityObjectType.Project;
00498 categoryObject.WSEC_OBJ_UID = projectGuid;
00499
00500 categoriesDataSet.SecurityCategoryObjects.AddSecurityCategoryObjectsRow(categoryObject);
00501 }
00502 }
00503
00504 #endregion
00505
00506 #region Authorization Methods
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516 public void SetResourceAuthorization(Guid resourceGuid,
00517 string account,
00518 bool isWindowsUser,
00519 bool preventAdSynch,
00520 Guid adUserGuid)
00521 {
00522 using (ResourceAuthorizationDataSet resourceAuthorizationDataSet = new ResourceAuthorizationDataSet())
00523 {
00524 ResourceAuthorizationDataSet.ResourcesRow resource = resourceAuthorizationDataSet.Resources.NewResourcesRow();
00525
00526 resource.RES_UID = resourceGuid;
00527 resource.RES_IS_WINDOWS_USER = isWindowsUser;
00528 resource.WRES_ACCOUNT = account;
00529 resource.RES_PREVENT_ADSYNC = preventAdSynch;
00530
00531 if (adUserGuid != Guid.Empty)
00532 {
00533 resource.WRES_AD_GUID = adUserGuid;
00534 }
00535
00536 resourceAuthorizationDataSet.Resources.AddResourcesRow(resource);
00537
00538 Parent.WebServices.Resources.SetResourceAuthorization(resourceAuthorizationDataSet);
00539 }
00540 }
00541
00542 #endregion
00543
00544 #endregion
00545
00546 #region Private Methods
00547
00548
00549
00550
00551
00552
00553
00554 private static void UnpackPermissions(Dictionary<string, Dictionary<Guid, List<object>>> permissionsDictionary,
00555 PermissionDataSet permissionDataSet)
00556 {
00557 permissionsDictionary.Add("Actions", new Dictionary<Guid, List<object>>());
00558 permissionsDictionary.Add("Features", new Dictionary<Guid, List<object>>());
00559
00560 foreach (PermissionDataSet.ActionsRow action in permissionDataSet.Actions.Rows)
00561 {
00562 permissionsDictionary["Actions"].Add(action.WSEC_FEA_ACT_UID, new List<object>());
00563
00564 permissionsDictionary["Actions"][action.WSEC_FEA_ACT_UID].Add(action.WSEC_FEA_ACT_NAME);
00565 permissionsDictionary["Actions"][action.WSEC_FEA_ACT_UID].Add(action.WSEC_FEA_ACT_PARENT);
00566 }
00567
00568 foreach (PermissionDataSet.FeaturesRow feature in permissionDataSet.Features.Rows)
00569 {
00570 permissionsDictionary["Features"].Add(feature.WSEC_FEA_ACT_UID, new List<object>());
00571
00572 permissionsDictionary["Features"][feature.WSEC_FEA_ACT_UID].Add(feature.WSEC_FEA_ACT_NAME);
00573 }
00574 }
00575
00576 #endregion
00577
00578 #region Public Indexers
00579
00580 #endregion
00581
00582 #region Private Methods
00583
00584 #endregion
00585 }
00586 }
00587
00588
00589
00590
00591