Example #1
0
 public CrudService(
     AnyServiceConfig config,
     IRepository <TEntity> repository,
     CrudValidatorBase <TEntity> validator,
     WorkContext workContext,
     IModelPreparar <TEntity> modelPreparar,
     IEventBus eventBus,
     IFileStoreManager fileStoreManager,
     IFilterFactory filterFactory,
     IPermissionManager permissionManager,
     IEnumerable <EntityConfigRecord> entityConfigRecords,
     ILogger <CrudService <TEntity> > logger)
 {
     Logger                    = logger;
     Config                    = config;
     Repository                = repository;
     Validator                 = validator;
     WorkContext               = workContext;
     ModelPreparar             = modelPreparar;
     EventBus                  = eventBus;
     FileStorageManager        = fileStoreManager;
     FilterFactory             = filterFactory;
     PermissionManager         = permissionManager;
     CurrentEntityConfigRecord = entityConfigRecords.First(typeof(TEntity));
 }
        public async Task UserIdIsNull_ReturnUnauthroized()
        {
            var logger = new Mock <ILogger <WorkContextMiddleware> >();
            var ecr    = new EntityConfigRecord
            {
                EndpointSettings = new EndpointSettings
                {
                    Route       = "/some-resource",
                    GetSettings = new EndpointMethodSettings {
                        Disabled = true
                    },
                    PutSettings = new EndpointMethodSettings {
                        Disabled = true
                    },
                },
                Type = typeof(string),
            };
            var entityConfigRecords = new[] { ecr };
            var wcm = new WorkContextMiddleware(null, entityConfigRecords, logger.Object);

            var user = new Mock <ClaimsPrincipal>();

            user.Setup(u => u.Claims).Returns(new Claim[] { });
            var ctx = new Mock <HttpContext>();

            ctx.SetupGet(r => r.Request.Headers).Returns(new HeaderDictionary());
            var res = new Mock <HttpResponse>();

            ctx.Setup(h => h.User).Returns(user.Object);
            ctx.Setup(h => h.Response).Returns(res.Object);
            var wc = new WorkContext();
            await wcm.InvokeAsync(ctx.Object, wc);

            res.VerifySet(r => r.StatusCode = StatusCodes.Status401Unauthorized, Times.Once);
        }
        public void EntityCreatedHandler_UpdatesExistsUserPermissions()
        {
            var expPr = new PermissionRecord("c", "r", "u", "d");
            var ecr   = new EntityConfigRecord {
                Type = typeof(TestClass), PermissionRecord = expPr
            };
            var sp = new Mock <IServiceProvider>();

            sp.Setup(s => s.GetService(typeof(IEnumerable <EntityConfigRecord>))).Returns(new[] { ecr });

            var userId = "uId";
            var dbUp   = new UserPermissions
            {
                UserId            = userId,
                EntityPermissions = new[] {
                    new EntityPermission
                    {
                        EntityId       = "eId",
                        EntityKey      = "ek",
                        PermissionKeys = new[] { "r1", "u1", "d1", },
                    },
                }
            };
            var pm = new Mock <IPermissionManager>();

            pm.Setup(p => p.GetUserPermissions(It.IsAny <string>())).ReturnsAsync(dbUp);
            sp.Setup(s => s.GetService(typeof(IPermissionManager))).Returns(pm.Object);
            var data = new TestClass
            {
                Value = 123
            };

            var ed = new DomainEvent
            {
                Data = data,
                PerformedByUserId = userId,
                WorkContext       = new WorkContext {
                    CurrentEntityConfigRecord = ecr
                },
            };
            var ph = new DefaultPermissionsEventsHandler(sp.Object);

            ph.PermissionCreatedHandler(ed);
            Thread.Sleep(250);

            pm.Verify(p => p.UpdateUserPermissions(It.Is <UserPermissions>(
                                                       up => up.UserId == userId &&
                                                       up.EntityPermissions.Count() == 2 &&
                                                       up.EntityPermissions.ElementAt(1).PermissionKeys.Contains(expPr.ReadKey) &&
                                                       up.EntityPermissions.ElementAt(1).PermissionKeys.Contains(expPr.UpdateKey) &&
                                                       up.EntityPermissions.ElementAt(1).PermissionKeys.Contains(expPr.DeleteKey))),
                      Times.Once);
        }
        public async Task ParseRequestInfoAndMoveToNext()
        {
            int i                 = 0,
                expI              = 15;
            string expUserId      = "user-id",
                   route          = "/some-resource/part2/",
                   expRequesteeId = "123",
                   expPath        = $"{route}/__public/{expRequesteeId}",
                   expMethod      = "get";

            var ecr = new EntityConfigRecord
            {
                Name             = "nane",
                EndpointSettings = new EndpointSettings
                {
                    Route = route,
                },
                Type = typeof(string),
            };
            var             entityConfigRecords = new[] { ecr };
            RequestDelegate reqDel = hc =>
            {
                i = expI;
                return(Task.CompletedTask);
            };

            var logger = new Mock <ILogger <WorkContextMiddleware> >();
            var user   = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.NameIdentifier, expUserId) }));
            var ctx    = new Mock <HttpContext>();
            var req    = new Mock <HttpRequest>();

            req.Setup(r => r.Path).Returns(new PathString(expPath));
            req.Setup(r => r.Method).Returns(expMethod);
            req.SetupGet(r => r.Headers).Returns(new HeaderDictionary());

            var response = new Mock <HttpResponse>();

            ctx.Setup(h => h.User).Returns(user);
            ctx.Setup(h => h.Request).Returns(req.Object);
            ctx.Setup(h => h.Response).Returns(response.Object);
            var wc = new WorkContext();

            var wcm = new WorkContextMiddleware(reqDel, entityConfigRecords, logger.Object);
            await wcm.InvokeAsync(ctx.Object, wc);

            i.ShouldBe(expI);
            wc.CurrentEntityConfigRecord.ShouldBe(ecr);
            wc.RequestInfo.Path.ShouldBe(expPath);
            wc.RequestInfo.Method.ShouldBe(expMethod);
            wc.RequestInfo.RequesteeId.ShouldBe(expRequesteeId);
        }
Example #5
0
        public void AllFuncs()
        {
            string post   = "post",
                   get    = "get",
                   put    = "put",
                   delete = "delete";
            var tc        = new EntityConfigRecord {
                PermissionRecord = new PermissionRecord(post, get, put, delete)
            };

            PermissionFuncs.GetByHttpMethod(post)(tc).ShouldBe(post);
            PermissionFuncs.GetByHttpMethod(get)(tc).ShouldBe(get);
            PermissionFuncs.GetByHttpMethod(put)(tc).ShouldBe(put);
            PermissionFuncs.GetByHttpMethod(delete)(tc).ShouldBe(delete);
        }
        public async Task CRUD_ReturnsExpResult(string method, string requesteeId, bool excluded, bool expGrantResult)
        {
            var ecr = new EntityConfigRecord
            {
                EntityKey        = nameof(TestModel),
                Type             = typeof(TestModel),
                PermissionRecord = new PermissionRecord("create", "read", "update", "delete"),
                EndpointSettings = new EndpointSettings
                {
                    PublicGet = true,
                },
            };
            var userPermissions = new UserPermissions
            {
                EntityPermissions = new[]
                {
                    new EntityPermission
                    {
                        Excluded       = excluded,
                        EntityId       = "some-entity-id",
                        EntityKey      = nameof(TestModel),
                        PermissionKeys = new[] { "create", "read", "update", "delete", },
                    },
                },
            };

            var pm = new Mock <IPermissionManager>();

            pm.Setup(pm => pm.GetUserPermissions(It.IsAny <string>())).ReturnsAsync(userPermissions);

            var logger = new Mock <ILogger <AnyServicePermissionMiddleware> >();
            var mw     = new TestAnyServicePermissionware(null, logger.Object);
            var wc     = new WorkContext
            {
                CurrentUserId             = "userId",
                CurrentEntityConfigRecord = ecr,
                RequestInfo = new RequestInfo
                {
                    Method      = method,
                    RequesteeId = requesteeId,
                },
            };
            var res = await mw.IsGrantedForTest(wc, pm.Object);

            res.ShouldBe(expGrantResult);
        }
        private static EndpointSettings NormalizeEndpointSettings(EntityConfigRecord ecr, AnyServiceConfig config)
        {
            var settings = (ecr.EndpointSettings ??= new EndpointSettings());

            if (settings.Disabled)
            {
                return(null);
            }
            BuildControllerMethodSettings(settings, ecr);

            if (!settings.Route.HasValue)
            {
                var areaPrefix = settings.Area.HasValue() ? $"{settings.Area}/" : "";
                settings.Route = new PathString($"/{areaPrefix}{ecr.Type.Name}");
            }

            var route = settings.Route;

            if (route.Value.EndsWith("/"))
            {
                settings.Route = new PathString(route.Value[0..^ 1]);
        public void BuildDisabledMethodMap()
        {
            var e = new EntityConfigRecord
            {
                Name             = "name",
                EndpointSettings = new EndpointSettings
                {
                    GetSettings = new EndpointMethodSettings {
                        Disabled = true
                    },
                    PutSettings = new EndpointMethodSettings {
                        Disabled = true
                    },
                }
            };
            var wcmt = new WorkContextMiddleware_ForTests(new[] { e });

            wcmt.ActiveMap[$"{e.Name}_post"].ShouldBeFalse();
            wcmt.ActiveMap[$"{e.Name}_get"].ShouldBeTrue();
            wcmt.ActiveMap[$"{e.Name}_put"].ShouldBeTrue();
            wcmt.ActiveMap[$"{e.Name}_delete"].ShouldBeFalse();
        }