예제 #1
0
        async Task <PagedResult <UserWithRoles> > IUserService.GetUsersWithRoles(GetUsersQuery query)
        {
            Check.NotNull(query, name: "Query");

            var currentPrincipal = await currentUserResolver.ResolveCurrentClaimsPrincipalAsync();

            await authorizationService.AuthorizeResourceType(currentPrincipal, Operation.Read, typeof(UserWithRoles));

            var users = userRepository.GetUsers();

            if (query.ExcludeMe)
            {
                var currentUser = await currentUserResolver.ResolveAsync();

                users = users.Where(u => u.Id != currentUser.Id);
            }

            var pagedResult = new PagedResult <UserWithRoles>();

            if (!string.IsNullOrWhiteSpace(query.QueryString))
            {
                try
                {
                    var parseResult = await queryParser.ApplyQuery(users, query.QueryString);

                    pagedResult.TotalCount = parseResult.TotalCount;
                    users = parseResult.Results;
                }
                catch (Exception ex)
                {
                    throw new ValidationException("Invalid query string", ex);
                }
            }

            if (string.IsNullOrWhiteSpace(query.OrderBy))
            {
                users = users.OrderBy(u => u.Name);
            }

            if (query.Top > Constants.MaxPageSize)
            {
                users = users.Take(Constants.MaxPageSize);
            }

            var usersWithRoles = new List <UserWithRoles>();

            foreach (var user in users)
            {
                usersWithRoles.Add(new UserWithRoles(user)
                {
                    Roles = await userManager.GetRoles(user.Id)
                });
            }

            pagedResult.Results = usersWithRoles.ToArray();
            return(pagedResult);
        }
        async Task ITimeEntryService.DeleteTimeEntry(DeleteTimeEntryCommand command)
        {
            var currentPrincipal = await currentUserResolver.ResolveCurrentClaimsPrincipalAsync();

            await authorizationService.AuthorizeResourceType(currentPrincipal, Operation.Delete, typeof(TimeEntry));

            Check.NotNull(command, errorMessage: "Command can not be null.");
            await validationService.Validate(command);

            var existingTimeEntry = await timeEntryRepository.GetTimeEntryById(command.TimeEntryId);

            if (existingTimeEntry == null)
            {
                return;
            }

            await authorizationService.AuthorizeResource(currentPrincipal, Operation.Delete, existingTimeEntry);

            await timeEntryRepository.DeleteTimeEntry(existingTimeEntry);
        }