public void AddModuleAndAction(string[] modules, string role) { roles r = context.roles.Where(x => x.role_name == role).FirstOrDefault(); IEnumerable <ModulesInRoles> listModule = r.ModulesInRoles; foreach (ModulesInRoles mInRole in listModule) { if (mInRole.Actions.Count > 0) { var actions = mInRole.Actions.ToList(); foreach (var a in actions) { mInRole.Actions.Remove(a); } } } context.ModulesInRoles.RemoveRange(listModule); context.SaveChanges(); foreach (string s in modules) { string[] temp = s.Split(';'); ModulesInRoles mr; Guid moduleId = new Guid(temp.First()); Guid actionId = new Guid(temp.Last()); ModulesInRoles available = context.ModulesInRoles.Where(x => x.RoleId == r.role_id).Where(x => x.ModuleId == moduleId).FirstOrDefault(); Business.Entities.Actions a = context.Actions.Find(actionId); if (available != null) { if (!available.Actions.Contains(a)) { available.Actions.Add(a); context.SaveChanges(); } } else { mr = new ModulesInRoles() { Id = Guid.NewGuid(), RoleId = r.role_id, ModuleId = new Guid(temp.First()) }; mr.Actions.Add(a); r.ModulesInRoles.Add(mr); context.SaveChanges(); } } }
//helper public string DrawRowModule(int level, ModuleViewModel m, List <Business.Entities.Actions> actions, roles role) { string collumn = "col-md-" + 9 / (actions.Count + 1); string style = "margin-left:" + 15 * level + "px"; string row = @"<div class='row' style='border-bottom:1px solid #000'> <div class='col-md-3'><div style='" + style + "'>" + m.ModuleName + @"</div></div>"; foreach (Business.Entities.Actions a in actions) { bool found = false; if (m.Actions.Count > 0) { ModulesInRoles mr = repoModulesInRole.FindByRoleAndModule(role.role_id, m.Id); found = false; if (mr != null)//check action { var enumerator = mr.Actions.GetEnumerator(); while (enumerator.MoveNext() && !found) { if (enumerator.Current.Id == a.Id) { found = true; } } } if (found) { row += "<div class='" + collumn + @"'><input type='checkbox' checked='checked' value='" + m.Id + ";" + a.Id + "' /></div>"; } else { row += "<div class='" + collumn + @"'><input type='checkbox' value='" + m.Id + ";" + a.Id + "' /></div>"; } } else { row += "<div class='" + collumn + @"'>-</div>"; } } row += " </div>"; return(row); }