예제 #1
0
        public void EmptyDiscriminator()
        {
            var ide = new IdentityDao
            {
                Id          = "test",
                Name        = "Test",
                Permissions = new[] {
                    new PermissionDao {
                        Value    = true,
                        Function = Admin.Id.ToString(),
                        Scopes   = new[] {
                            new ScopeDao
                            {
                                Discriminator = Discriminators.Category.Purchases,
                                Propagation   = ScopePropagation.ToMe | ScopePropagation.ToInclusions
                            }
                        }
                    }
                }.ToList()
            };

            string permissionExplanation = "Tengo:\r\n" +
                                           $" - Permiso ADMIN en la categoria 'Purchases' y sus subcategorias\r\n";

            var query =
                $"¿Debería poder '{nameof(Create)}' una instancia de documento Word sin categoria?\r\n" +
                " No";

            PrintTestTriedStarted(permissionExplanation + query);
            Assert.False(ide.Can(Create).Instance(File.Document.Word.Word1), permissionExplanation + query);
            PrintTestTriedStarted(permissionExplanation + query);
            Assert.False(ide.Can(Create).ByAll(
                             Factory.Get <TypeDiscriminatorFactory>().FromType <WordDocumentDao>(),
                             Discriminator.Empty <CategoryDao>()), permissionExplanation + query);

            query =
                $"¿Debería poder '{nameof(Create)}' una instancia de documento Word de la categoria 'Purchases'?\r\n" +
                " Si";
            PrintTestTriedStarted(permissionExplanation + query);
            Assert.True(ide.Can(Create).Instance(File.Document.Word.Word1.Transform(w => w.Category = Discriminators.Category.Purchases)), permissionExplanation + query);

            query =
                $"¿Debería poder '{nameof(Create)}' una instancia de documento Word de la categoria 'Sales'?\r\n" +
                " No";
            PrintTestTriedStarted(permissionExplanation + query);
            Assert.False(ide.Can(Create).Instance(File.Document.Word.Word1.Transform(w => w.Category = Discriminators.Category.Sales)), permissionExplanation + query);
        }
예제 #2
0
        public void GrantParentDeniedChildren()
        {
            var ide = new IdentityDao
            {
                Id          = "test",
                Name        = "Test",
                Permissions = new[] {
                    new PermissionDao {
                        Value    = true,
                        Function = Admin.Id.ToString(),
                        Scopes   = new[] {
                            new ScopeDao
                            {
                                Discriminator = Discriminators.Location.Country.Spain,
                                Propagation   = ScopePropagation.ToMe | ScopePropagation.ToInclusions
                            }
                        }
                    },
                    new PermissionDao {
                        Value    = false,
                        Function = Read.Id.ToString(),
                        Scopes   = new[] {
                            new ScopeDao
                            {
                                Discriminator = Discriminators.Location.City.Madrid,
                                Propagation   = ScopePropagation.ToMe | ScopePropagation.ToInclusions
                            },
                            new ScopeDao
                            {
                                Discriminator = Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(),
                                Propagation   = ScopePropagation.ToMe | ScopePropagation.ToInclusions
                            },
                        }
                    },
                }
            };

            string permissionExplanation = "Tengo:\r\n" +
                                           $" - Permiso ADMIN en el estado 'Spain' y sus sublocalizaciones\r\n" +
                                           $" - Denegado READ personas en la ciudad 'Madrid' y sus sublocalizaciones\r\n";

            var query =
                $"¿Debería poder '{nameof(Create)}' una instancia de persona sin ciudad?\r\n" +
                " No";

            PrintTestTriedStarted(permissionExplanation + query);
            Assert.False(ide.Can(Create).Instance(Person.Admin), permissionExplanation + query);

            query =
                $"¿Debería poder '{nameof(Create)}' una instancia de persona sin ciudad?\r\n" +
                " No";
            PrintTestTriedStarted(permissionExplanation + query);
            Assert.False(ide.Can(Create).ByAll(
                             Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(),
                             Discriminator.Empty <CityDao>()), permissionExplanation + query);

            {
                query =
                    $"¿Debería poder '{nameof(Create)}' una instancia de persona con la ciudad Madrid?\r\n" +
                    " No";

                PrintTestTriedStarted(permissionExplanation + query);
                Assert.False(ide.Can(Create).Instance(Person.MadridAdmin), permissionExplanation + query);

                PrintTestTriedStarted(permissionExplanation + query);
                Assert.False(ide.Can(Create).ByAll(
                                 Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(),
                                 Discriminators.Location.City.Madrid),
                             permissionExplanation + query);
            }

            {
                query =
                    $"¿Debería poder '{nameof(Create)}' una instancia de persona con la ciudad Alcorcon?\r\n" +
                    " Si";

                PrintTestTriedStarted(permissionExplanation + query);
                Assert.True(ide.Can(Create).Instance(Person.AlcorconAdmin), permissionExplanation + query);

                PrintTestTriedStarted(permissionExplanation + query);
                Assert.True(ide.Can(Create).ByAll(
                                Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(),
                                Discriminators.Location.City.Alcorcon), permissionExplanation + query);
            }

            var source = new[] { Person.AlcorconAdmin, Person.MadridAdmin };

            query =
                $"¿Debería filtrar para '{nameof(Create)}' una instancia de pesona con la ciudad Alcorcon?\r\n" +
                " No";
            PrintTestTriedStarted(permissionExplanation + query);
            var source1 = source.AuthorizedTo(ide, Create);

            using (Printer.Indent2("Source filtered results:"))
            {
                foreach (var per in source1)
                {
                    Printer.WriteLine("Person: " + per);
                }
            }
            Assert.True(source1.Contains(Person.AlcorconAdmin), permissionExplanation + query);

            query =
                $"¿Debería filtrar para '{nameof(Create)}' una instancia de pesona con la ciudad Madrid?\r\n" +
                " Si";
            PrintTestTriedStarted(permissionExplanation + query);
            Assert.False(source.AuthorizedTo(ide, Create).Contains(Person.MadridAdmin), permissionExplanation + query);

            query =
                $"¿Debería poder '{nameof(Read)}' objetos del tipo Word?\r\n" +
                " Si";
            PrintTestTriedStarted(permissionExplanation + query);
            Assert.True(ide.Can(Read).Type <WordDocumentDao>(), permissionExplanation + query);
        }