public UserRightTreeView ToTreeView(List <UserRightOfficeDTO> rights) { UserRightTreeView userRightTreeView = new UserRightTreeView(); //он все равно один userRightTreeView.UserId = rights.Where(d => d.UserId != null).Select(d => d.UserId).FirstOrDefault(); //равно как и офис userRightTreeView.OfficeId = rights.Where(d => d.OfficeId != null).Select(d => d.OfficeId).FirstOrDefault(); string office = rights.Where(d => d.OfficeShortName != null).Select(d => d.OfficeShortName).FirstOrDefault(); userRightTreeView.Office = new OfficeDTO { Id = userRightTreeView.OfficeId.GetValueOrDefault(), ShortName = office }; List <RightControllerBoxDTO> boxes = rights.Select(d => new RightControllerBoxDTO { Id = d.BoxId, Name = d.BoxName, LongName = d.BoxLongName }).Distinct().ToList(); foreach (var box in boxes) { List <RightControllerDTO> controllers = rights.Where(d => d.BoxId == box.Id) .Where(d => d.BoxId != null) .Select(d => new RightControllerDTO { Id = d.ControllerId.GetValueOrDefault(), Name = d.ControllerName, LongName = d.ControllerLongName }).Distinct().ToList(); foreach (var controller in controllers) { List <RightControllerActionDTO> actions = rights.Where(d => d.ControllerId == controller.Id) .Select(d => new RightControllerActionDTO { Id = d.ActionId.GetValueOrDefault(), Name = d.ActionName, LongName = d.ActionLongName, Value = d.Value.GetValueOrDefault() }).Distinct().ToList(); controller.Actions = actions; } box.Controllers = controllers; } userRightTreeView.Boxes = boxes; return(userRightTreeView); }
public IHttpActionResult PutUserRights(string userId, int officeId, UserRightTreeView tree) { UnitOfWork unitOfWork = new UnitOfWork(factory); SqlParameter pUserIdIn = new SqlParameter() { DbType = System.Data.DbType.String, Value = userId, ParameterName = "@UserId" }; SqlParameter pOfficeIdIn = new SqlParameter() { DbType = System.Data.DbType.Int32, Value = officeId, ParameterName = "@OfficeId" }; IEnumerable <int> actionIds = new List <int>(); if (tree.Boxes != null) { actionIds = tree.Boxes.SelectMany(d => d.Controllers.SelectMany(c => c.Actions.Where(g => g.Value == true).Select(a => a.Id))); } DataTable dataTable = new DataTable(); dataTable.Clear(); dataTable.Columns.Add("ActionId"); foreach (var actionId in actionIds) { DataRow row = dataTable.NewRow(); row["ActionId"] = actionId; dataTable.Rows.Add(row); } SqlParameter actions = new SqlParameter { ParameterName = "@Actions", TypeName = "ut_MaskRight", Value = dataTable, SqlDbType = SqlDbType.Structured }; List <UserRightOfficeDTO> rights = unitOfWork.SQLQuery <UserRightOfficeDTO>("exec UpdateAspNetUserRights @UserId, @OfficeId, @Actions", pUserIdIn, pOfficeIdIn, actions).ToList(); return(Ok(ToTreeView(rights))); }