/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
- /****************************************************************************************************
- Copyright (C) 2010 RapidWebDev Organization (http://rapidwebdev.org)
- Author: Eunge, Legal Name: Jian Liu, Email: eunge.liu@RapidWebDev.org
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- ****************************************************************************************************/
-
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Data.Linq;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Transactions;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Xml;
- using System.Xml.Schema;
- using BaoJianSoft.Common;
- using BaoJianSoft.Common.Data;
- using BaoJianSoft.Platform;
- using BaoJianSoft.Platform.Initialization;
- using BaoJianSoft.Platform.Linq;
- using BaoJianSoft.RapidWeb;
- using BaoJianSoft.RapidWeb.Controls;
- using BaoJianSoft.RapidWeb.DynamicPages;
- using NUnit.Framework;
-
- namespace BaoJianSoft.Tests.Platform
- {
- [TestFixture]
- public class PermissionApiTests
- {
- private static IPermissionApi permissionApi = SpringContext.Current.GetObject<IPermissionApi>();
- private static IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();
- private static IAuthenticationContext authenticationContext = SpringContext.Current.GetObject<IAuthenticationContext>();
-
- private List<Guid> createdRoleIds = new List<Guid>();
- private List<Guid> createdUserIds = new List<Guid>();
- private List<Guid> createdOrganizationTypeIds = new List<Guid>();
-
- [SetUp]
- public void StartUp()
- {
- }
-
- [TearDown]
- public void TearDown()
- {
- using (MembershipDataContext ctx = DataContextFactory.Create<MembershipDataContext>())
- {
- foreach (Guid createdUserId in createdUserIds)
- {
- ctx.Permissions.Delete(p => p.UserId == createdUserId);
- ctx.UsersInRoles.Delete(uir => uir.UserId == createdUserId);
- ctx.Memberships.Delete(m => m.UserId == createdUserId);
- ctx.Users.Delete(u => u.UserId == createdUserId);
- }
-
- foreach (Guid createdRoleId in createdRoleIds)
- {
- ctx.Permissions.Delete(p => p.RoleId == createdRoleId);
- ctx.RolesInOrganizationTypes.Delete(x => x.RoleId == createdRoleId);
- ctx.Roles.Delete(r => r.RoleId == createdRoleId);
- }
-
- foreach (Guid createdOrganizationTypeId in createdOrganizationTypeIds)
- {
- ctx.OrganizationTypes.Delete(orgType => orgType.OrganizationTypeId == createdOrganizationTypeId);
- }
-
- ctx.SubmitChanges();
- }
-
- createdRoleIds.Clear();
- createdUserIds.Clear();
- createdOrganizationTypeIds.Clear();
- }
-
- [Test, Description("Test permission on role only.")]
- public void PermissionOnRoleOnlyTest()
- {
- IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
- IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();
-
- OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Inc", Description = "department-desc" };
- organizationApi.Save(department);
- createdOrganizationTypeIds.Add(department.OrganizationTypeId);
-
- RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", OrganizationTypeIds = new Collection<Guid> { department.OrganizationTypeId }, Predefined = true };
- roleApi.Save(powerAdministrators);
- createdRoleIds.Add(powerAdministrators.RoleId);
-
- permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p2", "p3" });
- var collection = permissionApi.FindRolePermissions(powerAdministrators.RoleId);
- Assert.AreEqual(3, collection.Count());
-
- permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p2", "p3", "p4", "p5" });
- collection = permissionApi.FindRolePermissions(powerAdministrators.RoleId);
- Assert.AreEqual(5, collection.Count());
- }
-
- [Test, Description("Test permission on user only.")]
- public void PermissionOnUserOnlyTest()
- {
- IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();
- Guid userId = this.CreateUser(membershipApi);
-
- SetUserPermissions(userId, new string[] { "p1", "p2", "p3" });
-
- var collection = permissionApi.FindUserPermissions(userId, false);
- Assert.IsTrue(permissionApi.HasPermission(userId, "p1"));
- Assert.IsTrue(permissionApi.HasPermission(userId, "p2"));
- Assert.IsTrue(permissionApi.HasPermission(userId, "p3"));
-
- SetUserPermissions(userId, new string[] { "p2", "p3", "p4", "p5", });
-
- collection = permissionApi.FindUserPermissions(userId, false);
- Assert.IsFalse(permissionApi.HasPermission(userId, "p1"));
- Assert.IsTrue(permissionApi.HasPermission(userId, "p2"));
- Assert.IsTrue(permissionApi.HasPermission(userId, "p3"));
- Assert.IsTrue(permissionApi.HasPermission(userId, "p4"));
- Assert.IsTrue(permissionApi.HasPermission(userId, "p5"));
- }
-
- [Test, Description("Test permission on both user and role.")]
- public void PermissionOnBothUserAndRoleTest()
- {
- IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
- IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();
- IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();
-
- // create organization type
- OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Inc", Description = "department-desc" };
- organizationApi.Save(department);
- createdOrganizationTypeIds.Add(department.OrganizationTypeId);
-
- // create role
- RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", OrganizationTypeIds = new Collection<Guid> { department.OrganizationTypeId }, Predefined = true };
- roleApi.Save(powerAdministrators);
- createdRoleIds.Add(powerAdministrators.RoleId);
-
- // set permissions on the role
- permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p2", "p3" });
-
- // create user
- Guid eungeId = this.CreateUser(membershipApi);
-
- // set permission on the user
- SetUserPermissions(eungeId, new string[] { "p3", "p4", "p5" });
-
- // set the users as adminstrators
- roleApi.SetUserToRoles(eungeId, new Guid[] { powerAdministrators.RoleId });
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p1"));
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p2"));
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p3"));
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p4"));
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p5"));
-
- // set the users without any roles
- roleApi.SetUserToRoles(eungeId, new Guid[] { });
- Assert.IsFalse(permissionApi.HasPermission(eungeId, "p1"));
- Assert.IsFalse(permissionApi.HasPermission(eungeId, "p2"));
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p3"));
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p4"));
- Assert.IsTrue(permissionApi.HasPermission(eungeId, "p5"));
- }
-
- [Test, Description("Test pull permission configurations for specified user.")]
- public void PermissionConfigTest()
- {
- // create user
- Guid eungeId = this.CreateUser(membershipApi);
-
- // set permission on the user
- SetUserPermissions(eungeId, new string[] { "IncManagement.All", "CustomerManagement.View" });
-
- IEnumerable<PermissionConfig> permissionConfigs = permissionApi.FindPermissionConfig(eungeId);
-
- // maintenace
- PermissionConfig permissionConfig = permissionConfigs.FirstOrDefault();
- Assert.IsNotNull(permissionConfig);
-
- // membership
- permissionConfig = permissionConfig.Permission.FirstOrDefault();
- Assert.IsNotNull(permissionConfig);
-
- // organization
- permissionConfig = permissionConfig.Permission.FirstOrDefault();
- Assert.IsNotNull(permissionConfig);
-
- Assert.AreEqual(1, permissionConfig.Permission.Length);
- Assert.IsNotNull(permissionConfig.Permission.FirstOrDefault(p => p.Value == "IncManagement"));
-
- // set permission on the user
- SetUserPermissions(eungeId, new string[] { "AreaManagement", "IncManagement.All", "CustomerManagement.All" });
-
- permissionConfigs = permissionApi.FindPermissionConfig(eungeId);
-
- // maintenace
- permissionConfig = permissionConfigs.FirstOrDefault();
- Assert.IsNotNull(permissionConfig);
-
- // membership
- permissionConfig = permissionConfig.Permission.FirstOrDefault();
- Assert.IsNotNull(permissionConfig);
-
- // area management
- Assert.IsNotNull(permissionConfig.Permission.FirstOrDefault(p => p.Value == "AreaManagement"));
-
- // organization
- permissionConfig = permissionConfig.Permission.FirstOrDefault();
- Assert.IsNotNull(permissionConfig);
- Assert.AreEqual(2, permissionConfig.Permission.Length);
- }
-
- private Guid CreateUser(IMembershipApi membershipApi)
- {
- IPlatformConfiguration platformConfiguration = SpringContext.Current.GetObject<IPlatformConfiguration>();
-
- UserObject userObject = new UserObject
- {
- OrganizationId = platformConfiguration.Organization.OrganizationId,
- Comment = "IT specialist",
- DisplayName = string.Format("DisplayName {0}", Guid.NewGuid()),
- Email = "eunge.liu@gmail.com",
- IsApproved = true,
- MobilePin = "137641855XX",
- UserName = string.Format("UserName {0}", Guid.NewGuid())
- };
-
- membershipApi.Save(userObject, "password1", null);
- createdUserIds.Add(userObject.UserId);
-
- return userObject.UserId;
- }
-
- private static void SetUserPermissions(Guid userId, IEnumerable<string> permissions)
- {
- permissionApi.SetUserPermissions(userId, permissions);
- authenticationContext.Session["FindPermissionConfig_" + userId.ToString("N")] = null;
- authenticationContext.Session["FindSiteMapConfig_" + userId.ToString("N")] = null;
- }
- }
- }