コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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));
            }
        }