public SaveResponse Update(IUnitOfWork uow, UserRoleUpdateRequest request)
        {
            if (request is null)
            {
                throw new ArgumentNullException("request");
            }
            if (request.UserID is null)
            {
                throw new ArgumentNullException("userID");
            }
            if (request.Roles is null)
            {
                throw new ArgumentNullException("permissions");
            }

            var userID  = request.UserID.Value;
            var oldList = new HashSet <Int32>(
                GetExisting(uow.Connection, userID)
                .Select(x => x.RoleId.Value));

            var newList = new HashSet <Int32>(request.Roles.ToList());

            if (oldList.SetEquals(newList))
            {
                return(new SaveResponse());
            }

            foreach (var k in oldList)
            {
                if (newList.Contains(k))
                {
                    continue;
                }

                new SqlDelete(fld.TableName)
                .Where(
                    new Criteria(fld.UserId) == userID &
                    new Criteria(fld.RoleId) == k)
                .Execute(uow.Connection);
            }

            foreach (var k in newList)
            {
                if (oldList.Contains(k))
                {
                    continue;
                }

                uow.Connection.Insert(new MyRow
                {
                    UserId = userID,
                    RoleId = k
                });
            }

            Cache.InvalidateOnCommit(uow, fld);
            Cache.InvalidateOnCommit(uow, Entities.UserPermissionRow.Fields);

            return(new SaveResponse());
        }
Beispiel #2
0
        public async Task <bool> UpdateUserRole(UserRoleUpdateRequest request)
        {
            var user = await _userManager.FindByIdAsync(request.UserId.ToString());

            if (user == null)
            {
                return(false);
            }

            var removedRoles = request.Roles.Where(x => x.Selected == false)
                               .Select(x => x.Name).ToList();

            foreach (var roleName in removedRoles)
            {
                if (await _userManager.IsInRoleAsync(user, roleName) == true)
                {
                    await _userManager.RemoveFromRoleAsync(user, roleName);
                }
            }

            var addRoles = request.Roles.Where(x => x.Selected == true)
                           .Select(x => x.Name).ToList();

            foreach (var roleName in addRoles)
            {
                if (await _userManager.IsInRoleAsync(user, roleName) == false)
                {
                    await _userManager.AddToRoleAsync(user, roleName);
                }
            }

            return(true);
        }
Beispiel #3
0
 public void ChangeStatus(int id, UserRoleUpdateRequest req)
 {
     _dataProvider.ExecuteNonQuery(
         "dbo.UsersRoles_ChangeStatus",
         (paramCol) =>
     {
         paramCol.AddWithValue("@UserId", id);
         paramCol.AddWithValue("@IsActive", req.IsActive);
     },
         null
         );
 }
        public SaveResponse Update(IUnitOfWork uow, UserRoleUpdateRequest request)
        {
            Check.NotNull(request, "request");
            Check.NotNull(request.UserID, "userID");
            Check.NotNull(request.Roles, "permissions");

            var userID  = request.UserID.Value;
            var oldList = new HashSet <Int32>(
                GetExisting(uow.Connection, userID)
                .Select(x => x.RoleId.Value));

            var newList = new HashSet <Int32>(request.Roles.ToList());

            if (oldList.SetEquals(newList))
            {
                return(new SaveResponse());
            }

            foreach (var k in oldList)
            {
                if (newList.Contains(k))
                {
                    continue;
                }

                new SqlDelete(fld.TableName)
                .Where(
                    new Criteria(fld.UserId) == userID &
                    new Criteria(fld.RoleId) == k)
                .Execute(uow.Connection);
            }

            foreach (var k in newList)
            {
                if (oldList.Contains(k))
                {
                    continue;
                }

                uow.Connection.Insert(new MyRow
                {
                    UserId = userID,
                    RoleId = k
                });
            }

            BatchGenerationUpdater.OnCommit(uow, fld.GenerationKey);
            BatchGenerationUpdater.OnCommit(uow, Entities.UserPermissionRow.Fields.GenerationKey);

            return(new SaveResponse());
        }
Beispiel #5
0
        public async Task <IActionResult> UpdateUserRole(/*[FromForm]*/ UserRoleUpdateRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var result = await _userService.UpdateUserRole(request);

            if (!result)
            {
                return(BadRequest("Account is not exist"));
            }
            return(Ok(result));
        }
Beispiel #6
0
        public async Task <IActionResult> UpdateUserRoles(Guid userId, UserRoleUpdateRequest request, CancellationToken cancellationToken)
        {
            var user = await _dbContext.Users
                       .Include(e => e.Roles)
                       .FirstOrDefaultAsync(e => e.Id == userId, cancellationToken: cancellationToken);

            if (user == null)
            {
                return(NotFound(new ProblemDetails {
                    Detail = "No such user"
                }));
            }

            var otherAdminsPresent = await _dbContext.Users
                                     .Where(e => e.Id != user.Id)
                                     .AnyAsync(e => e.Roles.Any(r => r.Name == "admin"), cancellationToken);

            if (!request.RoleNames.Contains("admin") && !otherAdminsPresent)
            {
                return(BadRequest(new ProblemDetails {
                    Detail = "There must be at least one user with admin role"
                }));
            }

            user.Roles.Clear();
            var requestedRoles = await _dbContext.Roles.Where(r => request.RoleNames.Contains(r.Name))
                                 .ToListAsync(cancellationToken: cancellationToken);

            foreach (var role in requestedRoles)
            {
                user.Roles.Add(role);
            }

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(NoContent());
        }
 public SaveResponse Update(IUnitOfWork uow, UserRoleUpdateRequest request)
 {
     return(new MyRepository().Update(uow, request));
 }
 public SaveResponse Update(IUnitOfWork uow, UserRoleUpdateRequest request)
 {
     return new MyRepository().Update(uow, request);
 }