Exemplo n.º 1
0
        public async Task <IActionResult> GuardarCambios(string modulo, string subModulo, string rol, string descripcion, int idRol)
        {
            if (User.Identity.IsAuthenticated)
            {
                string permiso    = Permisos("PermisoSubModulo").PSMAPB ? "PermisoSubModulo" : "PermisoModulo";
                bool   crear      = Permisos(permiso).PMMAPL.Where(w => w.Value.Contains("Crear")).Any();
                bool   actualizar = Permisos(permiso).PMMAPL.Where(w => w.Value.Contains("Actualizar")).Any();
                if ((crear && idRol == 0) || (actualizar && idRol != 0))
                {
                    dynamic moduloJson    = JsonConvert.DeserializeObject(modulo);
                    dynamic subModuloJson = JsonConvert.DeserializeObject(subModulo);
                    List <Col_RolModulos>      modulos    = new List <Col_RolModulos>();
                    List <Col_SubModuloModulo> subModulos = new List <Col_SubModuloModulo>();
                    foreach (dynamic item in moduloJson)
                    {
                        Col_RolModulos _modulo = new Col_RolModulos();
                        _modulo.ModuloId     = item.ModuloId;
                        _modulo.PermisosCrud = item.PermisosCrud;
                        modulos.Add(_modulo);
                    }
                    if (subModuloJson.Count > 0)
                    {
                        foreach (dynamic item in subModuloJson)
                        {
                            Col_SubModuloModulo _subModulos = new Col_SubModuloModulo();
                            _subModulos.SubModuloId  = item.SubModuloId;
                            _subModulos.ModuloId     = item.ModuloId;
                            _subModulos.PermisosCrud = item.PermisosCrud;
                            subModulos.Add(_subModulos);
                        }
                    }

                    ApiCallResult result = idRol == 0 ? await service.GuardarAutorizaciones(modulos, subModulos, rol, descripcion) :
                                           await service.ActualizarAutorizaciones(modulos, subModulos, rol, descripcion, idRol);

                    return(Json(new { result }));
                }
                else
                {
                    return(NotFound());
                }
            }
            else
            {
                return(RedirectToAction("Index", "Login"));
            }
        }
Exemplo n.º 2
0
        public async Task <ApiCallResult> ActualizarAutorizaciones(List <Col_RolModulos> modulos, List <Col_SubModuloModulo> subModulos, string rolNombre, string descripcion, int idRol)
        {
            try
            {
                bool   status  = false;
                string title   = "Error";
                string message = "Ya existe un rol con este nombre";

                bool existeNombre = await context.Col_Roles.Where(w => w.NombreRol.Equals(rolNombre.ToUpper()) && w.RolId != idRol).AnyAsync();

                if (!existeNombre)
                {
                    status  = true;
                    title   = "Proceso exitoso";
                    message = "Los datos fueron actualizados correctamente en la plataforma";

                    #region Roles
                    Col_Roles _rol = await context.Col_Roles.Where(w => w.RolId.Equals(idRol)).FirstOrDefaultAsync();

                    _rol.NombreRol          = rolNombre.ToUpper();
                    _rol.Restringir         = subModulos.Count() > 0 ? true : false;
                    _rol.FechaActualizacion = DateTime.Now;
                    _rol.Descripcion        = descripcion;
                    context.Col_Roles.Update(_rol);
                    #endregion

                    #region Modulos
                    List <Col_RolModulos> _rolModulos = await context.Col_RolModulos.Where(w => w.RolId.Equals(idRol)).ToListAsync();

                    context.Col_RolModulos.RemoveRange(_rolModulos);
                    int?maxId = await context.Col_RolModulos.MaxAsync(m => (int?)m.Id);

                    int?id = maxId == null ? 1 : maxId + 1;
                    List <Col_RolModulos> rolModulos = new List <Col_RolModulos>();

                    foreach (Col_RolModulos item in modulos)
                    {
                        Col_RolModulos _rolModulo = new Col_RolModulos();
                        _rolModulo.Id           = Convert.ToInt32(id);
                        _rolModulo.RolId        = _rol.RolId;
                        _rolModulo.ModuloId     = item.ModuloId;
                        _rolModulo.PermisosCrud = item.PermisosCrud?.Trim();
                        rolModulos.Add(_rolModulo);
                        id++;
                    }
                    await context.AddRangeAsync(rolModulos);

                    #endregion

                    #region SubModulos
                    List <Col_SubModuloModulo> _subModulos = await context.Col_SubModuloModulo.Where(w => w.RolId.Equals(idRol)).ToListAsync();

                    context.Col_SubModuloModulo.RemoveRange(_subModulos);
                    if (subModulos.Count() > 0)
                    {
                        maxId = await context.Col_SubModuloModulo.MaxAsync(m => (int?)m.Id);

                        id = maxId == null ? 1 : maxId + 1;
                        List <Col_RolModulos>      queryModulo      = modulos.Where(w => !subModulos.Where(s => s.ModuloId == w.ModuloId).Any()).ToList();
                        List <Col_SubModuloModulo> subModuloModulos = new List <Col_SubModuloModulo>();

                        foreach (Col_RolModulos item in queryModulo)
                        {
                            Col_SubModuloModulo _subModulo = new Col_SubModuloModulo();
                            _subModulo.Id           = Convert.ToInt32(id);
                            _subModulo.ModuloId     = item.ModuloId;
                            _subModulo.SubModuloId  = null;
                            _subModulo.RolId        = _rol.RolId;
                            _subModulo.PermisosCrud = item.PermisosCrud.Trim();
                            subModuloModulos.Add(_subModulo);
                            id++;
                        }

                        foreach (Col_SubModuloModulo item in subModulos)
                        {
                            Col_SubModuloModulo _subModulo = new Col_SubModuloModulo();
                            _subModulo.Id           = Convert.ToInt32(id);
                            _subModulo.ModuloId     = item.ModuloId;
                            _subModulo.SubModuloId  = item.SubModuloId;
                            _subModulo.RolId        = _rol.RolId;
                            _subModulo.PermisosCrud = item.PermisosCrud.Trim();
                            subModuloModulos.Add(_subModulo);
                            id++;
                        }
                        await context.AddRangeAsync(subModuloModulos);
                    }
                    #endregion

                    await context.SaveChangesAsync();
                }

                return(new ApiCallResult
                {
                    Status = status,
                    Title = title,
                    Message = message
                });
            }
            #region catch
            catch (DbEntityValidationException e)
            {
                string err = "";
                foreach (DbEntityValidationResult eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (DbValidationError ve in eve.ValidationErrors)
                    {
                        err += ve.ErrorMessage;
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
                return(new ApiCallResult {
                    Status = false, Title = "Error al guardar", Message = "Favor contacte éste con el administrador"
                });
            }

            catch (Exception e)
            {
                string err = "";
                if (e.InnerException != null)
                {
                    if (e.InnerException.Message != null)
                    {
                        err = (e.InnerException.Message);
                        if (e.InnerException.InnerException != null)
                        {
                            err += e.InnerException.InnerException.Message;
                        }
                    }
                }
                else
                {
                    err = (e.Message);
                }
                return(new ApiCallResult {
                    Status = false, Title = "Error al guardar", Message = "Favor contacte éste con el administrador"
                });
            }
            #endregion
        }