상속: IPermissionManager
        public void Should_add_folder_to_manager()
        {
            var permissionManager = new InMemoryPermissionManager();
            var folder = new Mock<IFolder>();

            permissionManager.AddFolder(folder.Object);
        }
        private void Synchronize(object sender, EventArgs e)
        {
            var tmp = new InMemoryPermissionManager();

            // FolderGet has to return folders ordered by ID, otherwise the parent won't be 
            foreach (var folder in McmRepository.FolderGet())
            {
                var permissionFolder = new Folder
                                           {
                                               ID          = folder.ID,
                                               Name        = folder.Name,
                                               DateCreated = folder.DateCreated
                                           };

                if(folder.ParentID.HasValue)
                    permissionFolder.ParentFolder = tmp.GetFolders((uint) folder.ParentID);

                tmp.AddFolder(permissionFolder);
            }

            foreach (var permission in McmRepository.FolderPermissionGet())
            {
                foreach(var entityPermission in permission.UserPermissions)
                    tmp.GetFolders(permission.FolderID).AddUser(entityPermission);

                foreach (var entityPermission in permission.GroupPermissions)
                    tmp.GetFolders(permission.FolderID).AddGroup(entityPermission);
            }

            _folders = tmp._folders;
        }
        public void Should_assocociate_subfolders_with_parent_on_addfolder()
        {
            var permissionManager = new InMemoryPermissionManager();
            var folder1 = new Folder {ID = 1};
            var folder2 = new Folder {ID = 2, ParentFolder = folder1};

            permissionManager.AddFolder(folder1);
            permissionManager.AddFolder(folder2);

            Assert.AreEqual(1, folder1.GetSubFolders().Count());
        }
 public void Should_Add_User_to_folder_with_permission()
 {
     var permissionManager = new InMemoryPermissionManager();
     var folder1 = new Folder{ID = 1};
     var user    = new Mock<IEntityPermission>().SetupProperty(f => f.Guid, new Guid("39f26c89-5e6c-46d5-af3a-bc14a7e1486b"))
                                                .SetupProperty(f => f.Permission, FolderPermission.Max);
     
     permissionManager.AddFolder(folder1);
     permissionManager.GetFolders(folder1.ID).AddUser(user.Object);
     
     Assert.AreEqual(1, folder1.UserPermissions.Count);
 }
        public void Should_get_folder_by_ids()
        {
            var permissionManager = new InMemoryPermissionManager();
            var folder1 = new Mock<IFolder>().SetupProperty(f => f.ID, (uint)1)
                                             .SetupProperty(f => f.Name, "folder 1");
            var folder2 = new Mock<IFolder>().SetupProperty(f => f.ID, (uint)2)
                                             .SetupProperty(f => f.Name, "folder 2");

            permissionManager.AddFolder(folder1.Object);
            permissionManager.AddFolder(folder2.Object);

            Assert.AreEqual("folder 1", permissionManager.GetFolders(1).Name);
            Assert.AreEqual("folder 2", permissionManager.GetFolders(2).Name);
            Assert.AreEqual(1, permissionManager.GetFolders(1).ID);
            Assert.AreEqual(2, permissionManager.GetFolders(2).ID);
        }
        public void Should_assocociate_inherit_userpermissions_when_adding_subfolder()
        {
            var permissionManager = new InMemoryPermissionManager();
            var folder1 = new Folder { ID = 1, Name = "folder 1" };
            var folder2 = new Folder { ID = 2, Name = "folder 2", ParentFolder = folder1};
            var user    = new Mock<IEntityPermission>().SetupProperty(f => f.Guid, new Guid("39f26c89-5e6c-46d5-af3a-bc14a7e1486b"))
                                                       .SetupProperty(f => f.Permission, FolderPermission.Max);

            permissionManager.AddFolder(folder1);
            permissionManager.GetFolders(folder1.ID).AddUser(user.Object);
            permissionManager.AddFolder(folder2);

            var result = permissionManager.GetFolders(folder2.ID);

            Assert.AreEqual("folder 2", result.Name);
            Assert.AreEqual(1, result.UserPermissions.Count);
            Assert.AreEqual("39f26c89-5e6c-46d5-af3a-bc14a7e1486b", result.UserPermissions.First().Key.ToString());          
        }
        public void Should_propagate_userpermissions_to_subfolders_when_adding_a_user()
        {
            var permissionManager = new InMemoryPermissionManager();
            var folder1 = new Folder { ID = 1 };
            var folder2 = new Folder { ID = 1, ParentFolder = folder1 };
            var user    = new Mock<IEntityPermission>().SetupProperty(f => f.Guid, new Guid("39f26c89-5e6c-46d5-af3a-bc14a7e1486b"))
                                                       .SetupProperty(f => f.Permission, FolderPermission.Max);

            permissionManager.AddFolder(folder1);
            permissionManager.AddFolder(folder2);
            permissionManager.GetFolders(folder1.ID).AddUser(user.Object);

            Assert.AreEqual(user.Object.Guid, folder2.UserPermissions.First().Key);
            Assert.AreEqual(user.Object.Permission, folder2.UserPermissions.First().Value);
        }
        public void Should_synchronize_with_permission_repository()
        {
            var permissionManager = new InMemoryPermissionManager();
            var entity = new Mock<IEntityPermission>();
            var mcmRepository = new Mock<IMcmRepository>();
            var syncSpecification = new Mock<ISynchronizationSpecification>();
            entity.SetupProperty(p => p.Guid, new Guid("c86a1cfc-10de-4a51-8d7b-6ba8f985e273"))
                  .SetupProperty(p => p.Permission, FolderPermission.Read);
            mcmRepository.Setup(repo => repo.FolderGet(null, null, null)).Returns(new[] { new Mcm.Data.Dto.Standard.Folder { ID = 1 } });
            mcmRepository.Setup(repo => repo.FolderPermissionGet()).Returns(new[] { new Mcm.Data.Dto.FolderPermission { FolderID = 1, UserPermissions = new List<IEntityPermission> { entity.Object }, GroupPermissions = new List<IEntityPermission> { entity.Object } } });

            permissionManager.WithSynchronization(mcmRepository.Object, syncSpecification.Object);

            syncSpecification.Raise(s => s.OnSynchronizationTrigger += null, new EventArgs());
            Assert.AreEqual(1, permissionManager.GetFolders(1).UserPermissions.Count);
            Assert.AreEqual(1, permissionManager.GetFolders(1).GroupPermissions.Count);
        }
        public void Should_Get_SubFolders_With_Permission_Through_Group()
        {
            var permissionManager = new InMemoryPermissionManager();
            var folder1 = new Folder { ID = 1 };
            var folder2 = new Folder { ID = 2, ParentFolder = folder1 };
            var folder3 = new Folder { ID = 3, ParentFolder = folder2 };
            var folder4 = new Folder { ID = 4 };
            var perm1   = new Mock<IEntityPermission>().SetupProperty(f => f.Guid, new Guid("39f26c89-5e6c-46d5-af3a-bc14a7e1486b"))
                                                       .SetupProperty(f => f.Permission, FolderPermission.Max);
            var perm2   = new Mock<IEntityPermission>().SetupProperty(f => f.Guid, new Guid("40f26c89-5e6c-46d5-af3a-bc14a7e1486b"))
                                                       .SetupProperty(f => f.Permission, FolderPermission.Read);

            permissionManager.AddFolder(folder1);
            permissionManager.AddFolder(folder2);
            permissionManager.AddFolder(folder3);
            permissionManager.AddFolder(folder4);
            permissionManager.GetFolders(folder1.ID).AddGroup(perm2.Object);

            var hasPermissions = permissionManager.GetFolders(folder1.ID).DoesUserOrGroupHavePermission(perm1.Object.Guid, new[] { perm2.Object.Guid }, FolderPermission.Read );
            var folders        = permissionManager.GetFolders(folder1.ID).GetSubFolders().Where(item => item.DoesUserOrGroupHavePermission(perm1.Object.Guid, new[] { perm2.Object.Guid }, FolderPermission.Read));

            Assert.IsTrue(hasPermissions);
            Assert.AreEqual(2, folders.First().ID);
        }
        public void Should_Get_TopFolders_With_Group_Permission()
        {
            var permissionManager = new InMemoryPermissionManager();
            var folder1 = new Folder { ID = 1 };
            var folder2 = new Folder { ID = 2 };
            var folder3 = new Folder { ID = 3, ParentFolder = folder1 };
            var folder4 = new Folder { ID = 4, ParentFolder = folder2 };
            var folder5 = new Folder { ID = 5, ParentFolder = folder3};
            var folder6 = new Folder { ID = 6, ParentFolder = folder4};
            var perm1   = new Mock<IEntityPermission>().SetupProperty(f => f.Guid, new Guid("39f26c89-5e6c-46d5-af3a-bc14a7e1486b"))
                                                       .SetupProperty(f => f.Permission, FolderPermission.Max);
            var perm2   = new Mock<IEntityPermission>().SetupProperty(f => f.Guid, new Guid("40f26c89-5e6c-46d5-af3a-bc14a7e1486b"))
                                                       .SetupProperty(f => f.Permission, FolderPermission.Max);

            permissionManager.AddFolder(folder1);
            permissionManager.AddFolder(folder2);
            permissionManager.AddFolder(folder3);
            permissionManager.AddFolder(folder4);
            permissionManager.AddFolder(folder5);
            permissionManager.AddFolder(folder6);
            permissionManager.GetFolders(folder1.ID).AddGroup(perm1.Object);
            permissionManager.GetFolders(folder4.ID).AddUser(perm1.Object);

            var topFolders = permissionManager.GetFolders(FolderPermission.Read, perm1.Object.Guid, new[] { perm2.Object.Guid, perm1.Object.Guid }).ToList();

            Assert.AreEqual(2, topFolders.Count());
            Assert.AreEqual(folder1.ID, topFolders[0].ID);
            Assert.AreEqual(folder4.ID, topFolders[1].ID);
        }
        public void HasPermissionToObject_GivenObjectGuidWithPermission_ReturnTrue()
        {
            var permissionManager = new InMemoryPermissionManager(McmRepository.Object);
            var objectGuid = new Guid("af40f5e3-2cbf-944f-b833-6c444ad760e1");
            var userGuid = new Guid("10000000-0000-0000-0000-000000000001");
            var folderDtos = new[] { new Mcm.Data.Dto.Standard.Folder { ID = 1 } };
            McmRepository.Setup(m => m.FolderGet(null, null, objectGuid)).Returns(folderDtos);
            permissionManager.AddFolder(new Folder
            {
                ID = 1,
                UserPermissions = new Dictionary<Guid, FolderPermission> { { userGuid, FolderPermission.Read } }
            });

            var result = permissionManager.HasPermissionToObject(objectGuid, userGuid, null, FolderPermission.Read);

            Assert.That(result, Is.True);
        }