public void DeniedPermissionOnRoleOnlyTest()
        {
            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();

            OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Department", Description = "department-desc" };
            organizationApi.Save(department);
            createdOrganizationTypeIds.Add(department.OrganizationTypeId);

            RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", Domain = "Department", Predefined = true };
            roleApi.Save(powerAdministrators);
            createdRoleIds.Add(powerAdministrators.RoleId);

            permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p1.Create", "p1.Update", "p2", "p1.Create.Denied" });
            var collection = permissionApi.FindRolePermissions(powerAdministrators.RoleId);
            Assert.AreEqual(4, collection.Count());
            Assert.IsFalse(collection.Contains(new PermissionObject("p1.Create")), "The role should not have the permission p1.Create");

            permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p1.Create", "p1.Update", "p2", "p1.Denied" });
            collection = permissionApi.FindRolePermissions(powerAdministrators.RoleId);
            Assert.AreEqual(2, collection.Count());

            bool hasP1Denied = collection.Contains(new PermissionObject("p1.Denied"));
            bool hasP2 = collection.Contains(new PermissionObject("p2"));
            Assert.IsTrue(hasP1Denied && hasP2, "The role should only have the permission p1.Denied and p2.");
        }
        public void BasicCRUDTest()
        {
            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
            OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Department", Description = "department-desc" };
            organizationApi.Save(department);
            createdOrganizationTypeIds.Add(department.OrganizationTypeId);

            OrganizationTypeObject customer = new OrganizationTypeObject { Name = "customer", Domain = "Customer", Description = "customer-desc" };
            organizationApi.Save(customer);
            createdOrganizationTypeIds.Add(customer.OrganizationTypeId);

            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();
            RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", Domain = "Department", Predefined = true };
            RoleObject business = new RoleObject { RoleName = "business", Description = "business-desc", Domain = "Department" };
            RoleObject customers = new RoleObject { RoleName = "customers", Description = "customers-desc", Domain = "Customer" };
            roleApi.Save(powerAdministrators);
            roleApi.Save(business);
            roleApi.Save(customers);

            createdRoleIds.AddRange(new Guid[] { powerAdministrators.RoleId, business.RoleId, customers.RoleId });

            powerAdministrators = roleApi.Get(powerAdministrators.RoleId);
            Assert.AreEqual("powerAdministrators", powerAdministrators.RoleName);
            Assert.AreEqual("powerAdministrators-desc", powerAdministrators.Description);
            Assert.IsTrue(powerAdministrators.Predefined);
            Assert.AreEqual("Department", powerAdministrators.Domain);

            business = roleApi.Get(business.RoleId);
            Assert.AreEqual("business", business.RoleName);
            Assert.AreEqual("business-desc", business.Description);
            Assert.IsFalse(business.Predefined);
            Assert.AreEqual("Department", business.Domain);

            powerAdministrators.RoleName = "admins";
            powerAdministrators.Description = "admins-desc";
            roleApi.Save(powerAdministrators);

            powerAdministrators = roleApi.Get(powerAdministrators.RoleId);
            Assert.AreEqual("admins", powerAdministrators.RoleName);
            Assert.AreEqual("admins-desc", powerAdministrators.Description);
            Assert.IsTrue(powerAdministrators.Predefined);

            Assert.AreEqual(3, roleApi.FindByDomain("Department").Count());
            Assert.AreEqual(1, roleApi.FindByDomain("Customer").Count());

            roleApi.HardDelete(business.RoleId);
            business = roleApi.Get(business.RoleId);
            Assert.IsNull(business);
            Assert.AreEqual(2, roleApi.FindByDomain("Department").Count());
        }
        public void TestUpdate()
        {
            RoleDetailPanel page = new RoleDetailPanel();

            DetailPanelPageProxy proxy = new DetailPanelPageProxy(page);

            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();

            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();

            IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();

            IPermissionApi permissionApi = SpringContext.Current.GetObject<IPermissionApi>();

            using (var httpEnv = new HttpEnvironment())
            {
                httpEnv.SetRequestUrl(@"/RoleDetailPanel/DynamicPage.svc?Domain=Department");
                UserObject current = membershipApi.Get("admin");
                httpEnv.SetSessionParaemeter("CurrentUser", current);

                #region Create Data
                Guid guid = Guid.NewGuid();
                string surfix = guid.ToString().Substring(0, 5);

                OrganizationTypeObject obj = new OrganizationTypeObject()
                {
                    Name = "OrganizationTypeTest" + surfix,
                    Description = "OrganizationTypeTest" + surfix,
                    Predefined = false,
                    Domain = "Department",
                    DeleteStatus = DeleteStatus.NotDeleted
                };

                organizationApi.Save(obj);
                OrganizationTypeObjectIds.Add(obj.OrganizationTypeId);

                RoleObject roleObj = new RoleObject()
                {
                    Domain = "Department",
                    RoleName = "superRole" + surfix,
                    Predefined = false
                };

                roleApi.Save(roleObj);

                RoleIds.Add(roleObj.RoleId);
                #endregion

                #region Bind Web Control
                TextBox TextBoxName = new TextBox();
                TextBoxName.Text = "SuperRole" + surfix;
                proxy.Set("TextBoxName", TextBoxName);

                TextBox TextBoxDescription = new TextBox();
                TextBoxDescription.Text = "SuperRoleUpdate" + surfix;
                proxy.Set("TextBoxDescription", TextBoxDescription);

                PermissionTreeView permissionTreeView = new PermissionTreeView();
                proxy.Set("PermissionTreeView", permissionTreeView);
                Type _type = typeof(PermissionTreeView);
                _type.GetMethod("OnInit", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(permissionTreeView, new object[] { new EventArgs() });
                IList<string> values = new List<string>();

                IList<PermissionConfig> permissions = permissionApi.FindPermissionConfig(current.UserId).ToList<PermissionConfig>();
                for (int i = 0; i < permissions.Count; i++)
                {
                    if ((permissions[i].Value == null) || (permissions[i].Value.Equals(String.Empty)))
                        values.Add("P" + i);
                    else
                        values.Add(permissions[i].Value);
                }
                permissionTreeView.CheckedValues = values;
                #endregion

                proxy.Update(roleObj.RoleId.ToString());

                Assert.AreEqual(roleApi.Get(roleObj.RoleId).Description, "SuperRoleUpdate" + surfix);

            }
        }
        public void UserPositivePermissionOverrideRoleDeniedPermissionTest()
        {
            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 = "Department", Description = "department-desc" };
            organizationApi.Save(department);
            createdOrganizationTypeIds.Add(department.OrganizationTypeId);

            // create role
            RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", Domain = "Department", Predefined = true };
            roleApi.Save(powerAdministrators);
            createdRoleIds.Add(powerAdministrators.RoleId);

            // set permissions on the role
            permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "p1", "p1.Create", "p1.Update", "p1.Create.Denied", "p2" });

            // create user
            Guid eungeId = this.CreateUser(membershipApi);

            // set permission on the user
            SetUserPermissions(eungeId, new string[] { "p1.Create" });

            // set the users as adminstrators
            roleApi.SetUserToRoles(eungeId, new Guid[] { powerAdministrators.RoleId });
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "p1"));
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "p1.Create"));
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "p1.Update"));
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "p2"));

            // set the users without any roles
            roleApi.SetUserToRoles(eungeId, new Guid[] { });
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "p1.Create"));
        }
        public void PermissionOnRoleOnlyTest()
        {
            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();

            OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Department", Description = "department-desc" };
            organizationApi.Save(department);
            createdOrganizationTypeIds.Add(department.OrganizationTypeId);

            RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", Domain = "Department", 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());
        }
        public void ImplicitPermissionTest()
        {
            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 = "Department", Description = "department-desc" };
            organizationApi.Save(department);
            createdOrganizationTypeIds.Add(department.OrganizationTypeId);

            // create role
            RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", Domain = "Department", Predefined = true };
            roleApi.Save(powerAdministrators);
            createdRoleIds.Add(powerAdministrators.RoleId);

            // set permissions on the role
            permissionApi.SetRolePermissions(powerAdministrators.RoleId, new string[] { "PermissionWithImplicitPermissions" });
            IEnumerable<PermissionObject> rolePermissions = permissionApi.FindRolePermissions(powerAdministrators.RoleId);
            Assert.AreEqual(3, rolePermissions.Count());
            Assert.IsTrue(rolePermissions.Contains(new PermissionObject("PermissionWithImplicitPermissions")));
            Assert.IsTrue(rolePermissions.Contains(new PermissionObject("ImplicitPermission1")));
            Assert.IsTrue(rolePermissions.Contains(new PermissionObject("ImplicitPermission2")));

            // create user
            Guid eungeId = this.CreateUser(membershipApi);

            // set permission on the user
            SetUserPermissions(eungeId, new string[] { "PX" });

            // set the users as adminstrators
            roleApi.SetUserToRoles(eungeId, new Guid[] { powerAdministrators.RoleId });

            // asserts
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "PX"));
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "PermissionWithImplicitPermissions"));
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "ImplicitPermission1"));
            Assert.IsTrue(permissionApi.HasPermission(eungeId, "ImplicitPermission2"));
        }
        public void TestQuery()
        {
            RoleManagement page = new RoleManagement();

            DynamicPageProxy proxy = new DynamicPageProxy(page);

            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();

            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();

            IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();

            IPermissionApi permissionApi = SpringContext.Current.GetObject<IPermissionApi>();

            using (var httpEnv = new HttpEnvironment())
            {
                httpEnv.SetRequestUrl(@"/RoleManagement/DynamicPage.svc?Domain=Department");
                #region Create Data
                Guid guid = Guid.NewGuid();
                string surfix = guid.ToString().Substring(0, 5);

                OrganizationTypeObject obj = new OrganizationTypeObject()
                {
                    Name = "OrganizationTypeTest" + surfix,
                    Description = "OrganizationTypeTest" + surfix,
                    Predefined = false,
                    Domain = "Department",
                    DeleteStatus = DeleteStatus.NotDeleted
                };

                organizationApi.Save(obj);
                OrganizationTypeObjectIds.Add(obj.OrganizationTypeId);

                RoleObject roleObj = new RoleObject()
                {
                    Domain = "Department",
                    RoleName = "superRole" + surfix,
                    Predefined = false
                };

                roleApi.Save(roleObj);

                RoleIds.Add(roleObj.RoleId);
                #endregion

                #region bind query varibles
                QueryParameterExpression expression = new QueryParameterExpression("RoleName", QueryFieldOperators.Equal, "superRole" + surfix);

                SortExpression sort = new SortExpression("RoleName");

                QueryParameter parameters = new QueryParameter()
                {
                    //Expressions = express,
                    PageIndex = 0,
                    PageSize = 10,
                    SortExpression = sort
                };

                parameters.Expressions.Add(expression);

                QueryResults results = proxy.Query(parameters);

                foreach (var result in results.Results)
                {
                    Assert.AreEqual(DataBinder.Eval(result, "RoleName"), "superRole" + surfix);
                }
                #endregion
            }
        }
        public void UsersAndRolesTest()
        {
            IPlatformConfiguration platformConfiguration = SpringContext.Current.GetObject<IPlatformConfiguration>();
            IMembershipApi membershipApi = SpringContext.Current.GetObject<IMembershipApi>();
            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();

            UserObject eunge = new UserObject
            {
                OrganizationId = platformConfiguration.Organization.OrganizationId,
                UserName = "******",
                DisplayName = "Eunge",
                Email = "*****@*****.**",
                Comment = "The author of RapidWebDev.",
                IsApproved = true
            };

            membershipApi.Save(eunge, "password1", null);
            createdUserIds.Add(eunge.UserId);

            OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Department", Description = "department-desc" };
            organizationApi.Save(department);
            createdOrganizationTypeIds.Add(department.OrganizationTypeId);

            RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", Domain = "Department" };
            RoleObject business = new RoleObject { RoleName = "business", Description = "business-desc", Domain = "Department" };
            roleApi.Save(powerAdministrators);
            roleApi.Save(business);
            createdRoleIds.AddRange(new Guid[] { powerAdministrators.RoleId, business.RoleId });

            roleApi.SetUserToRoles(eunge.UserId, new Guid[] { powerAdministrators.RoleId });
            Assert.AreEqual(1, roleApi.FindByUserId(eunge.UserId).Count());
            Assert.IsTrue(roleApi.IsUserInRole(eunge.UserId, powerAdministrators.RoleId));
            Assert.IsTrue(roleApi.IsUserInRole(eunge.UserId, "powerAdministrators"));

            roleApi.SetUserToRoles(eunge.UserId, new Guid[] { powerAdministrators.RoleId, business.RoleId });
            Assert.AreEqual(2, roleApi.FindByUserId(eunge.UserId).Count());
            Assert.IsTrue(roleApi.IsUserInRole(eunge.UserId, powerAdministrators.RoleId));
            Assert.IsTrue(roleApi.IsUserInRole(eunge.UserId, "powerAdministrators"));
            Assert.IsTrue(roleApi.IsUserInRole(eunge.UserId, business.RoleId));
            Assert.IsTrue(roleApi.IsUserInRole(eunge.UserId, "business"));
        }
        public void UpdateRoleWithDuplicateNameTest()
        {
            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
            OrganizationTypeObject department = new OrganizationTypeObject { Name = "department", Domain = "Department", Description = "department-desc" };
            organizationApi.Save(department);
            createdOrganizationTypeIds.Add(department.OrganizationTypeId);

            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();
            RoleObject administrators = new RoleObject { RoleName = "administrators", Description = "administrators-desc", Domain = "Department" };
            RoleObject business = new RoleObject { RoleName = "business", Description = "business-desc", Domain = "Department" };
            roleApi.Save(administrators);
            roleApi.Save(business);
            createdRoleIds.AddRange(new Guid[] { administrators.RoleId, business.RoleId });

            business.RoleName = "administrators";
            roleApi.Save(business);
        }
        public void FindRolesTest()
        {
            IRoleApi roleApi = SpringContext.Current.GetObject<IRoleApi>();
            RoleObject powerAdministrators = new RoleObject { RoleName = "powerAdministrators", Description = "powerAdministrators-desc", Domain = "Department", Predefined = true };
            RoleObject business = new RoleObject { RoleName = "business", Description = "business-desc", Domain = "Department", Predefined = true };
            RoleObject customers = new RoleObject { RoleName = "customers", Description = "customers-desc", Domain = "Customer"};

            roleApi.Save(powerAdministrators);
            roleApi.Save(business);
            roleApi.Save(customers);
            createdRoleIds.AddRange(new Guid[] { powerAdministrators.RoleId, business.RoleId, customers.RoleId });

            LinqPredicate linqPredicate = new LinqPredicate("Predefined=@0 And RoleName=@1", true, "business");
            int recordCount;
            IEnumerable<RoleObject> roles = roleApi.FindRoles(linqPredicate, null, 0, 10, out recordCount);
            Assert.AreEqual(1, recordCount);
            Assert.AreEqual("business", roles.First().RoleName);
            Assert.AreEqual("business-desc", roles.First().Description);
        }