public ActionResult Edit(FormCollection dadosTipoUtilizador, int id) { //Obtém, de acordo com o ID, o tipo de utilizador respetivo para editar TipoUtilizador editTipoUtilizador = db.TipoUtilizadors.Single(t => t.idTipoUtilizador == id); //Verifica cada dado introduzido pelo utilizador por inconsistências (se os campos estão preenchidos, se os campos são válidos, etc.) if (string.IsNullOrEmpty(dadosTipoUtilizador["TipoUtilizador.nome"]) == true) { ModelState.AddModelError("TipoUtilizador.nome", "Tem de introduzir um nome para o novo tipo de utilizador!"); } else { //Se o nome do tipo de utilizador introduzido não for igual ao que estava, mas se já existe um tipo de utilizador com o novo nome introduzido, retorna erro if (editTipoUtilizador.nome != dadosTipoUtilizador["TipoUtilizador.nome"] && db.TipoUtilizadors.SingleOrDefault(t => t.nome == dadosTipoUtilizador["TipoUtilizador.nome"]) != default(TipoUtilizador)) { ModelState.AddModelError("TipoUtilizador.nome", "Um tipo de utilizador com este nome já se encontra criado!"); } } if (ModelState.IsValid == true) { //Associa os novos dados ao tipo de utilizador editTipoUtilizador.nome = dadosTipoUtilizador["TipoUtilizador.nome"]; //Apaga todas as relações permissão-tipo associadas a este tipo de utilizador particular db.Permissao_TipoUtilizadors.DeleteAllOnSubmit(db.Permissao_TipoUtilizadors.Where(pt => pt.idTipoUtilizador == id)); db.SubmitChanges(); //Depois das relações apagadas, volta a criar novas relações permissão-tipo, com base nas novas checkboxes seleccionadas foreach (Permissao p in db.Permissaos) { //Visto que o ASP.NET MVC faz umas coisas esquisitas com as checkboxes, este workaround certifica que a checkbox de cada permissão é corretamente validada if (dadosTipoUtilizador[string.Concat("permissao", p.idPermissao)].Contains("true") == true) { Permissao_TipoUtilizador newPermissaoTipoUtilizador = new Permissao_TipoUtilizador(); newPermissaoTipoUtilizador.idTipoUtilizador = editTipoUtilizador.idTipoUtilizador; newPermissaoTipoUtilizador.idPermissao = p.idPermissao; db.Permissao_TipoUtilizadors.InsertOnSubmit(newPermissaoTipoUtilizador); } } db.SubmitChanges(); return(RedirectToAction("Index")); } else { //Compõe o ViewModel para a página de edição do tipo de utiizador TiposUtilizadorViewModel editViewModel = new TiposUtilizadorViewModel(); editViewModel.TipoUtilizador = db.TipoUtilizadors.Single(t => t.idTipoUtilizador == id); editViewModel.PermissoesTipoUtilizadorList = db.Permissao_TipoUtilizadors.Where(pt => pt.idTipoUtilizador == id).ToList(); editViewModel.PermissoesList = db.Permissaos.ToList(); return(View(editViewModel)); } }
public ActionResult Create(FormCollection dadosTipoUtilizador) { //Verifica cada dado introduzido pelo utilizador por inconsistências (se os campos estão preenchidos, se os campos são válidos, etc.) if (string.IsNullOrEmpty(dadosTipoUtilizador["TipoUtilizador.nome"]) == true) { ModelState.AddModelError("TipoUtilizador.nome", "Tem de introduzir um nome para o novo tipo de utilizador!"); } else { //Se já existe um tipo de utilizador com o nome introduzido, retorna erro if (db.TipoUtilizadors.SingleOrDefault(t => t.nome == dadosTipoUtilizador["nome"]) != default(TipoUtilizador)) { ModelState.AddModelError("TipoUtilizador.nome", "Um tipo de utilizador com este nome já se encontra criado!"); } } if (ModelState.IsValid == true) { TipoUtilizador newTipoUtilizador = new TipoUtilizador(); newTipoUtilizador.nome = dadosTipoUtilizador["TipoUtilizador.nome"]; db.TipoUtilizadors.InsertOnSubmit(newTipoUtilizador); db.SubmitChanges(); foreach (Permissao p in db.Permissaos) { //Visto que o ASP.NET MVC faz umas coisas esquisitas com as checkboxes, este workaround certifica que a checkbox de cada permissão é corretamente validada if (dadosTipoUtilizador[string.Concat("permissao", p.idPermissao)].Contains("true") == true) { Permissao_TipoUtilizador newPermissaoTipoUtilizador = new Permissao_TipoUtilizador(); newPermissaoTipoUtilizador.idTipoUtilizador = newTipoUtilizador.idTipoUtilizador; newPermissaoTipoUtilizador.idPermissao = p.idPermissao; db.Permissao_TipoUtilizadors.InsertOnSubmit(newPermissaoTipoUtilizador); } } db.SubmitChanges(); return(RedirectToAction("Index")); } else { TiposUtilizadorViewModel createViewModel = new TiposUtilizadorViewModel(); createViewModel.PermissoesList = db.Permissaos.ToList(); return(View(createViewModel)); } }