PageRenderTime 62ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 1ms

/tags/1.31/src/Tests/Platform/PermissionApiTests.cs

#
C# | 257 lines | 178 code | 45 blank | 34 comment | 10 complexity | de34ed17592bd364874a1fe4ed3d495e MD5 | raw file
Possible License(s): AGPL-1.0, LGPL-2.1
  1. /****************************************************************************************************
  2. Copyright (C) 2010 RapidWebDev Organization (http://rapidwebdev.org)
  3. Author: Eunge, Legal Name: Jian Liu, Email: eunge.liu@RapidWebDev.org
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. ****************************************************************************************************/
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Collections.ObjectModel;
  18. using System.Data.Linq;
  19. using System.IO;
  20. using System.Linq;
  21. using System.Text;
  22. using System.Transactions;
  23. using System.Web.UI;
  24. using System.Web.UI.WebControls;
  25. using System.Xml;
  26. using System.Xml.Schema;
  27. using BaoJianSoft.Common;
  28. using BaoJianSoft.Common.Data;
  29. using BaoJianSoft.Platform;
  30. using BaoJianSoft.Platform.Initialization;
  31. using BaoJianSoft.Platform.Linq;
  32. using BaoJianSoft.RapidWeb;
  33. using BaoJianSoft.RapidWeb.Controls;
  34. using BaoJianSoft.RapidWeb.DynamicPages;
  35. using NUnit.Framework;
  36. namespace BaoJianSoft.Tests.Platform
  37. {
  38. [TestFixture]
  39. public class PermissionApiTests
  40. {
  41. private static IPermissionApi permissionApi = SpringContext.Current.GetObject<IPermissionApi>();
  42. private static IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();
  43. private static IAuthenticationContext authenticationContext = SpringContext.Current.GetObject<IAuthenticationContext>();
  44. private List<Guid> createdRoleIds = new List<Guid>();
  45. private List<Guid> createdUserIds = new List<Guid>();
  46. private List<Guid> createdOrganizationTypeIds = new List<Guid>();
  47. [SetUp]
  48. public void StartUp()
  49. {
  50. }
  51. [TearDown]
  52. public void TearDown()
  53. {
  54. using (MembershipDataContext ctx = DataContextFactory.Create<MembershipDataContext>())
  55. {
  56. foreach (Guid createdUserId in createdUserIds)
  57. {
  58. ctx.Permissions.Delete(p => p.UserId == createdUserId);
  59. ctx.UsersInRoles.Delete(uir => uir.UserId == createdUserId);
  60. ctx.Memberships.Delete(m => m.UserId == createdUserId);
  61. ctx.Users.Delete(u => u.UserId == createdUserId);
  62. }
  63. foreach (Guid createdRoleId in createdRoleIds)
  64. {
  65. ctx.Permissions.Delete(p => p.RoleId == createdRoleId);
  66. ctx.RolesInOrganizationTypes.Delete(x => x.RoleId == createdRoleId);
  67. ctx.Roles.Delete(r => r.RoleId == createdRoleId);
  68. }
  69. foreach (Guid createdOrganizationTypeId in createdOrganizationTypeIds)
  70. {
  71. ctx.OrganizationTypes.Delete(orgType => orgType.OrganizationTypeId == createdOrganizationTypeId);
  72. }
  73. ctx.SubmitChanges();
  74. }
  75. createdRoleIds.Clear();
  76. createdUserIds.Clear();
  77. createdOrganizationTypeIds.Clear();
  78. }
  79. [Test, Description("Test permission on role only.")]
  80. public void PermissionOnRoleOnlyTest()
  81. {
  82. IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
  83. IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();
  84. OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Inc", Description = "department-desc" };
  85. organizationApi.Save(department);
  86. createdOrganizationTypeIds.Add(department.OrganizationTypeId);
  87. RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", OrganizationTypeIds = new Collection<Guid> { department.OrganizationTypeId }, Predefined = true };
  88. roleApi.Save(powerAdministrators);
  89. createdRoleIds.Add(powerAdministrators.RoleId);
  90. permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p2", "p3" });
  91. var collection = permissionApi.FindRolePermissions(powerAdministrators.RoleId);
  92. Assert.AreEqual(3, collection.Count());
  93. permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p2", "p3", "p4", "p5" });
  94. collection = permissionApi.FindRolePermissions(powerAdministrators.RoleId);
  95. Assert.AreEqual(5, collection.Count());
  96. }
  97. [Test, Description("Test permission on user only.")]
  98. public void PermissionOnUserOnlyTest()
  99. {
  100. IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();
  101. Guid userId = this.CreateUser(membershipApi);
  102. SetUserPermissions(userId, new string[] { "p1", "p2", "p3" });
  103. var collection = permissionApi.FindUserPermissions(userId, false);
  104. Assert.IsTrue(permissionApi.HasPermission(userId, "p1"));
  105. Assert.IsTrue(permissionApi.HasPermission(userId, "p2"));
  106. Assert.IsTrue(permissionApi.HasPermission(userId, "p3"));
  107. SetUserPermissions(userId, new string[] { "p2", "p3", "p4", "p5", });
  108. collection = permissionApi.FindUserPermissions(userId, false);
  109. Assert.IsFalse(permissionApi.HasPermission(userId, "p1"));
  110. Assert.IsTrue(permissionApi.HasPermission(userId, "p2"));
  111. Assert.IsTrue(permissionApi.HasPermission(userId, "p3"));
  112. Assert.IsTrue(permissionApi.HasPermission(userId, "p4"));
  113. Assert.IsTrue(permissionApi.HasPermission(userId, "p5"));
  114. }
  115. [Test, Description("Test permission on both user and role.")]
  116. public void PermissionOnBothUserAndRoleTest()
  117. {
  118. IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
  119. IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();
  120. IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();
  121. // create organization type
  122. OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Inc", Description = "department-desc" };
  123. organizationApi.Save(department);
  124. createdOrganizationTypeIds.Add(department.OrganizationTypeId);
  125. // create role
  126. RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", OrganizationTypeIds = new Collection<Guid> { department.OrganizationTypeId }, Predefined = true };
  127. roleApi.Save(powerAdministrators);
  128. createdRoleIds.Add(powerAdministrators.RoleId);
  129. // set permissions on the role
  130. permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p2", "p3" });
  131. // create user
  132. Guid eungeId = this.CreateUser(membershipApi);
  133. // set permission on the user
  134. SetUserPermissions(eungeId, new string[] { "p3", "p4", "p5" });
  135. // set the users as adminstrators
  136. roleApi.SetUserToRoles(eungeId, new Guid[] { powerAdministrators.RoleId });
  137. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p1"));
  138. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p2"));
  139. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p3"));
  140. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p4"));
  141. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p5"));
  142. // set the users without any roles
  143. roleApi.SetUserToRoles(eungeId, new Guid[] { });
  144. Assert.IsFalse(permissionApi.HasPermission(eungeId, "p1"));
  145. Assert.IsFalse(permissionApi.HasPermission(eungeId, "p2"));
  146. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p3"));
  147. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p4"));
  148. Assert.IsTrue(permissionApi.HasPermission(eungeId, "p5"));
  149. }
  150. [Test, Description("Test pull permission configurations for specified user.")]
  151. public void PermissionConfigTest()
  152. {
  153. // create user
  154. Guid eungeId = this.CreateUser(membershipApi);
  155. // set permission on the user
  156. SetUserPermissions(eungeId, new string[] { "IncManagement.All", "CustomerManagement.View" });
  157. IEnumerable<PermissionConfig> permissionConfigs = permissionApi.FindPermissionConfig(eungeId);
  158. // maintenace
  159. PermissionConfig permissionConfig = permissionConfigs.FirstOrDefault();
  160. Assert.IsNotNull(permissionConfig);
  161. // membership
  162. permissionConfig = permissionConfig.Permission.FirstOrDefault();
  163. Assert.IsNotNull(permissionConfig);
  164. // organization
  165. permissionConfig = permissionConfig.Permission.FirstOrDefault();
  166. Assert.IsNotNull(permissionConfig);
  167. Assert.AreEqual(1, permissionConfig.Permission.Length);
  168. Assert.IsNotNull(permissionConfig.Permission.FirstOrDefault(p => p.Value == "IncManagement"));
  169. // set permission on the user
  170. SetUserPermissions(eungeId, new string[] { "AreaManagement", "IncManagement.All", "CustomerManagement.All" });
  171. permissionConfigs = permissionApi.FindPermissionConfig(eungeId);
  172. // maintenace
  173. permissionConfig = permissionConfigs.FirstOrDefault();
  174. Assert.IsNotNull(permissionConfig);
  175. // membership
  176. permissionConfig = permissionConfig.Permission.FirstOrDefault();
  177. Assert.IsNotNull(permissionConfig);
  178. // area management
  179. Assert.IsNotNull(permissionConfig.Permission.FirstOrDefault(p => p.Value == "AreaManagement"));
  180. // organization
  181. permissionConfig = permissionConfig.Permission.FirstOrDefault();
  182. Assert.IsNotNull(permissionConfig);
  183. Assert.AreEqual(2, permissionConfig.Permission.Length);
  184. }
  185. private Guid CreateUser(IMembershipApi membershipApi)
  186. {
  187. IPlatformConfiguration platformConfiguration = SpringContext.Current.GetObject<IPlatformConfiguration>();
  188. UserObject userObject = new UserObject
  189. {
  190. OrganizationId = platformConfiguration.Organization.OrganizationId,
  191. Comment = "IT specialist",
  192. DisplayName = string.Format("DisplayName {0}", Guid.NewGuid()),
  193. Email = "eunge.liu@gmail.com",
  194. IsApproved = true,
  195. MobilePin = "137641855XX",
  196. UserName = string.Format("UserName {0}", Guid.NewGuid())
  197. };
  198. membershipApi.Save(userObject, "password1", null);
  199. createdUserIds.Add(userObject.UserId);
  200. return userObject.UserId;
  201. }
  202. private static void SetUserPermissions(Guid userId, IEnumerable<string> permissions)
  203. {
  204. permissionApi.SetUserPermissions(userId, permissions);
  205. authenticationContext.Session["FindPermissionConfig_" + userId.ToString("N")] = null;
  206. authenticationContext.Session["FindSiteMapConfig_" + userId.ToString("N")] = null;
  207. }
  208. }
  209. }