using Application.Domain.Entities; using Application.Models; using Infrastructure.Application; using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Web.Mvc; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using System; using System.Linq; namespace IoT.Shared.Areas.Admin.Controllers { [ApiExplorerSettings(IgnoreApi = false)] [Authorize] [Area(nameof(Admin))] public class UserController : CrudController, EditUserModel, EditUserModel> { private readonly RoleController _ajax; public UserController(IRepository repo, RoleController ajax) : base(repo) { this._ajax = ajax; } public override IQueryable Include(IQueryable query) { return query.Include(o => o.UserRoles).ThenInclude(o => o.Role); } public override void ToDisplayModel(User entity, EditUserModel model) { model.Roles = entity.UserRoles.Select(o => new SelectListItem { Value = o.RoleId.ToString(), Text = o.Role.Name }).ToList(); //entity.UserRoles.ForEach(o => ViewData.Add(o.RoleId, o.Role.Name)); } public override void ToEditModel(User entity, EditUserModel model) { this.ViewData.MultiSelectList(o => model.Roles, () => this._ajax.GetRoleMultiSelectList(model.Roles.Select(o => Guid.Parse(o.Value)))); } public override void ToEntity(EditUserModel model, User entity) { foreach (var roleId in entity.UserRoles.Select(o => o.RoleId).ToList()) { if (!model.Roles.Any(o => o.Value == roleId.ToString())) { entity.UserRoles.RemoveAll(o => o.RoleId == roleId); } } foreach (var role in model.Roles) { if (!entity.UserRoles.Any(o => o.RoleId.ToString() == role.Value)) { entity.UserRoles.Add(new UserRole { RoleId = Guid.Parse(role.Value) }); } } } } }