Ejemplo n.º 1
0
        public void DeferredSecurity()
        {
            var cachier = GetCachier();

            ModelSecurityProvider.TimesWasUsed = 0;
            var modelReader   = Guid.NewGuid();
            var modelWriter   = Guid.NewGuid();
            var elementReader = Guid.NewGuid();
            var elementWriter = Guid.NewGuid();

            var elemPermissions = new SecurityPermissions
            {
                AllowedForRead  = new[] { elementReader },
                AllowedForWrite = new[] { elementWriter }
            };

            var modelPermissions = new SecurityPermissions
            {
                AllowedForRead  = new[] { modelReader },
                AllowedForWrite = new[] { modelWriter }
            };

            cachier.Post(_singleModel.Key, modelPermissions);
            cachier.Post(_dependentModel.Key, modelPermissions);
            cachier.Post(_singleElement.Key, elemPermissions);
            cachier.Post(_dependentElement.Key, elemPermissions);

            var user1 = Guid.NewGuid();
            var user2 = Guid.NewGuid();

            var group1 = new SecurityGroup {
                Groups = new[] { modelReader, elementReader, elementWriter }
            };

            var group2 = new SecurityGroup {
                Groups = new[] { modelReader, elementReader, modelWriter }
            };

            cachier.Post(user1, group1);
            cachier.Post(user2, group2);

            Session.UserId = user1;


            var elem  = cachier.GetLater <Element>(_singleElement.Key);
            var elem2 = cachier.GetLater <Element>(_dependentElement.Key);

            Assert.IsNotNull(elem.Value);
            Assert.IsNotNull(elem2.Value);
            Assert.AreEqual(1, ModelSecurityProvider.TimesWasUsed);//серия должна взяться один раз
            //после этого должы браться результаты серии закэшированные результаты
            ModelSecurityProvider.TimesWasUsed = 0;
            cachier.Post(_singleElement.Key, _singleElement);
            cachier.Post(_dependentElement.Key, _dependentElement);
            Assert.AreEqual(0, ModelSecurityProvider.TimesWasUsed);

            Session.UserId = user2;
            elem           = cachier.GetLater <Element>(_singleElement.Key);
            elem2          = cachier.GetLater <Element>(_dependentElement.Key);

            Assert.IsNotNull(elem.Value);
            Assert.IsNotNull(elem2.Value);
            Assert.AreEqual(1, ModelSecurityProvider.TimesWasUsed);//серия должна взяться один раз
            //после этого должы браться результаты серии закэшированные результаты
            ModelSecurityProvider.TimesWasUsed = 0;
            MockHelper.AwaitException <SecurityException>(() => cachier.Post(_singleElement.Key, _singleElement));
            MockHelper.AwaitException <SecurityException>(() => cachier.Post(_dependentElement.Key, _dependentElement));

            Assert.AreEqual(0, ModelSecurityProvider.TimesWasUsed);
        }
Ejemplo n.º 2
0
        public void ChangingSecurity()
        {
            var cachier = GetCachier();

            var modelReader   = Guid.NewGuid();
            var modelWriter   = Guid.NewGuid();
            var elementReader = Guid.NewGuid();
            var elementWriter = Guid.NewGuid();

            var elemPermissions = new SecurityPermissions
            {
                AllowedForRead  = new[] { elementReader },
                AllowedForWrite = new[] { elementWriter }
            };

            var modelPermissions = new SecurityPermissions
            {
                AllowedForRead  = new[] { modelReader },
                AllowedForWrite = new[] { modelWriter }
            };

            cachier.Post(_singleModel.Key, modelPermissions);
            cachier.Post(_dependentModel.Key, modelPermissions);
            cachier.Post(_singleElement.Key, elemPermissions);
            cachier.Post(_dependentElement.Key, elemPermissions);

            var user1 = Guid.NewGuid();
            var user2 = Guid.NewGuid();

            var group1 = new SecurityGroup {
                Groups = new[] { modelReader, elementReader, elementWriter }
            };

            var group2 = new SecurityGroup {
                Groups = new[] { modelReader, elementReader, modelWriter }
            };

            cachier.Post(user1, group1);
            cachier.Post(user2, group2);

            Session.UserId = user1;
            var elem = cachier.Get <Element>(_singleElement.Key);

            Assert.IsNotNull(elem);
            var model = cachier.Get <Model>(_singleModel.Key);

            Assert.IsNotNull(model);

            //запрещаем чтение из модели
            group1.Groups = new[] { elementReader, elementWriter };

            elem = cachier.Get <Element>(_singleElement.Key);
            Assert.IsNotNull(elem);
            model = cachier.Get <Model>(_singleModel.Key);
            Assert.IsNotNull(model);

            cachier.Post(user1, group1);
            elem = cachier.Get <Element>(_singleElement.Key);
            Assert.IsNotNull(elem);
            model = cachier.Get <Model>(_singleModel.Key);
            Assert.IsNull(model);
            MockHelper.AwaitException <SecurityException>(() => cachier.Post(_singleModel.Key, _singleModel));
            cachier.Post(_singleElement.Key, _singleElement);

            //разрешаем только запись во все
            group1.Groups = new[] { modelWriter, elementWriter };
            cachier.Post(user1, group1);
            cachier.Post(_singleModel.Key, _singleModel);
            cachier.Post(_singleElement.Key, _singleElement);

            Session.UserId = user2;
            elem           = cachier.Get <Element>(_singleElement.Key);
            Assert.IsNotNull(elem);
            model = cachier.Get <Model>(_singleModel.Key);
            Assert.IsNotNull(model);
            MockHelper.AwaitException <SecurityException>(() => cachier.Post(_singleElement.Key, _singleElement));
            cachier.Post(_singleModel.Key, _singleModel);
        }