Пример #1
0
        /// <summary>
        /// Assigns the permission.
        /// </summary>
        /// <param name="permissionIds">The permission ids.</param>
        /// <param name="apiContext">The API context.</param>
        /// <returns></returns>
        public UserPermissionResponse AssignPermission(UserPermissionDTO permissionIds, ApiContext apiContext)
        {
            _context = (AVOUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            UserPermissionsDTO userPermissions = null;

            for (int i = 0; i < permissionIds.PermissionIds.Length; i++)
            {
                userPermissions              = new UserPermissionsDTO();
                userPermissions.UserId       = permissionIds.UserId;
                userPermissions.PermissionId = Convert.ToInt16(permissionIds.PermissionIds[i]);
                userPermissions.UserorRole   = "User";
                // userPermissions.CreatedBy = CreatedBy;
                userPermissions.CreatedDate = DateTime.Now;
                userPermissions.Status      = true;
                var _usersPer = _mapper.Map <TblUserPermissions>(userPermissions);
                _context.TblUserPermissions.Add(_usersPer);
            }
            _context.SaveChanges();
            //return userPermissions;
            return(new UserPermissionResponse {
                Status = BusinessStatus.Created, perm = userPermissions, ResponseMessage = $"Assigned {userPermissions.PermissionId} Permissions successfully!!"
            });
        }
Пример #2
0
        public async Task <UserPermissionsDTO> GetPermissionsAsync(string userId)
        {
            var entity = await _dbContext.Users.FirstOrDefaultAsync(x => x.Id == userId);

            if (entity == null)
            {
                throw new ArgumentException("User not exists");
            }

            var claims = await _userManager.GetClaimsAsync(entity);

            var givenName  = claims.FirstOrDefault(x => x.Type == JwtRegisteredClaimNames.GivenName)?.Value;
            var familyName = claims.FirstOrDefault(x => x.Type == JwtRegisteredClaimNames.FamilyName)?.Value;
            var result     = new UserPermissionsDTO
            {
                UserName = entity.UserName,
                Name     = $"{familyName}{givenName}",
                Email    = entity.Email,
                Services = new List <ServicePermissionsDTO>()
            };

            var permissions = await _dbContext.Permissions.Include(x => x.Service).ToListAsync();

            var dict = await _dbContext.UserPermissions.Where(x => x.UserId == userId)
                       .ToDictionaryAsync(x => x.PermissionId, x => x);

            var permissionsGroupByService = permissions.GroupBy(x => x.Service.Name);

            foreach (var service in permissionsGroupByService)
            {
                var servicePermissionsDto =
                    new ServicePermissionsDTO {
                    Service = service.Key, Groups = new List <GroupPermissionDTO>()
                };
                var servicePermissions = service.ToList();
                var groups             = servicePermissions.GroupBy(x => x.Module);

                foreach (var group in groups)
                {
                    var groupPermission = new GroupPermissionDTO
                    {
                        Permissions = new List <GrantPermissionDTO>(), Module = group.Key
                    };

                    foreach (var permission in group)
                    {
                        groupPermission.Permissions.Add(new GrantPermissionDTO
                        {
                            Name          = permission.Name,
                            Id            = permission.Id,
                            HasPermission = dict.ContainsKey(permission.Id)
                        });
                    }

                    servicePermissionsDto.Groups.Add(groupPermission);
                }

                result.Services.Add(servicePermissionsDto);
            }

            return(result);
        }