Пример #1
0
        public async Task <string> GetTokenAsync(int id)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var key          = Encoding.ASCII.GetBytes(AuthorizationConstants.JwtSecretKey);
            var user         = await _userRepository.GetUserAsync(id);

            var specification = new UserRoleFilterSpecification(id);
            var role          = _roleRepository.GetByIdAsync(_userRoleRepository.FirstOrDefaultAsync(specification).Result.RoleId).Result.Name;
            var claims        = new List <Claim> {
                new Claim(ClaimTypes.NameIdentifier, id.ToString()),
                new Claim(ClaimTypes.Name, user.FirstName + " " + user.LastName),
                new Claim(ClaimTypes.Email, user.Email)
            };

            claims.Add(new Claim(ClaimTypes.Role, role));

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims.ToArray()),
                IssuedAt           = DateTime.UtcNow,
                Issuer             = "AdminProject",
                Expires            = DateTime.UtcNow.AddSeconds(_configuration.GetValue <int>("Tokens:Lifetime")),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));
        }
Пример #2
0
        public async Task <UserRole> GetByIdAsync(int id, CancellationToken cancellationToken = default)
        {
            var specFilter = new UserRoleFilterSpecification(id);
            var results    = await _unitOfWork.UserRoleRepository.ListAsync(specFilter, null, cancellationToken);

            if (cancellationToken.IsCancellationRequested)
            {
                throw new Exception("Cancellation token requested");
            }

            if (results?.Count > 0)
            {
                return(results[0]);
            }
            return(null);
        }
Пример #3
0
        public async Task <ActionResult> UpdateItemAsync([FromBody] UserRoleDTO userRoleDTO, CancellationToken cancellationToken)
        {
            var specFilter = new UserRoleFilterSpecification(userRoleDTO.Id.Value);
            var rowCount   = await _userRoleService.CountAsync(specFilter, cancellationToken);

            if (rowCount == 0)
            {
                throw new EntityNotFoundException(nameof(UserRole), userRoleDTO.Id);
            }

            // bind to old item
            var item = _mapper.Map <UserRole>(userRoleDTO);

            var result = await _userRoleService.UpdateAsync(item, cancellationToken);

            if (!result)
            {
                AssignToModelState(_userRoleService.Errors);
                return(ValidationProblem());
            }

            return(CreatedAtAction(nameof(ItemByIdAsync), new { id = item.Id }, null));
        }
Пример #4
0
        public async Task <bool> UpdateAsync(UserRole entity, CancellationToken cancellationToken = default)
        {
            if (!ValidateBase(entity))
            {
                return(false);
            }

            // update header
            AssignUpdater(entity);
            await _unitOfWork.UserRoleRepository.ReplaceAsync(entity, entity.Id, cancellationToken);

            if (cancellationToken.IsCancellationRequested)
            {
                throw new Exception("Cancellation token requested");
            }

            // ambil old data
            var specFilter  = new UserRoleFilterSpecification(entity.Id);
            var oldEntities = await _unitOfWork.UserRoleRepository.ListAsync(specFilter, null, cancellationToken);

            if (cancellationToken.IsCancellationRequested)
            {
                throw new Exception("Cancellation token requested");
            }

            var oldEntity = oldEntities.FirstOrDefault();
            List <UserRoleDetail> oldEntityToBeDeleted = new List <UserRoleDetail>();

            if (oldEntity.UserRoleDetails.Count > 0)
            {
                foreach (var item in oldEntity.UserRoleDetails)
                {
                    oldEntityToBeDeleted.Add(item);
                }
            }

            // smart update
            if (entity.UserRoleDetails.Count > 0)
            {
                foreach (var item in entity.UserRoleDetails)
                {
                    var hasUpdate = false;
                    if (oldEntity.UserRoleDetails.Count > 0)
                    {
                        var data = oldEntity.UserRoleDetails.SingleOrDefault(p => p.Id == item.Id);
                        if (data != null)
                        {
                            AssignUpdater(item);
                            await _unitOfWork.UserRoleDetailRepository.ReplaceAsync(item, item.Id, cancellationToken);

                            oldEntityToBeDeleted.Remove(data);

                            hasUpdate = true;
                        }
                    }

                    if (!hasUpdate)
                    {
                        oldEntity.AddOrReplaceRole(item);
                    }
                }
            }

            if (oldEntityToBeDeleted.Count > 0)
            {
                foreach (var item in oldEntityToBeDeleted)
                {
                    oldEntity.RemoveRole(item);
                }
            }

            await _unitOfWork.UserRoleRepository.UpdateAsync(oldEntity);

            await _unitOfWork.CommitAsync(cancellationToken);

            return(true);
        }