private void GuardarLog(Usuario usuario, bool esLogOn) { var accion = _accionesRepository.ObtenerPorNombre(esLogOn ? "LogOn" : "LogOff", "Account"); if (accion == null) { var controlador = _controladoresRepository.ObtenerPorNombre("Account"); if (controlador == null) { controlador = new Controlador() { Descripcion = "Controlador de registro de sesión", Nombre = "Account" }; _controladoresRepository.Guardar(controlador); } accion = new Accion() { IdControlador = controlador.Id, Descripcion = esLogOn ? "Registro de sesión" : "Cerrar sesión", NombreAmigable = esLogOn ? "Login" : "Logoff", NombreAccion = esLogOn ? "LogOn" : "LogOff" }; _accionesRepository.Guardar(accion); } //var log = new Log() //{ // IdAccion = accion.Id, // Fecha = DateTime.Now, // IdUsuario = usuario.Id, // Parametros = usuario.NombreUsuario, //}; //_logsRepository.Guardar(log); }
public static bool PermitirMenu(string nombreAccion, string nombreControlador) { var usaurio = Usuario; if (!usaurio.Activo) { return(false); } var accion = AccionesRepository.ObtenerPorNombre(nombreAccion, nombreControlador); return(accion != null && PermisosRolRepository.PoseePermiso(Usuario.IdRol, accion.Id)); }
public override void OnActionExecuting(ActionExecutingContext actionExecutingContext) { var usuario = SesionUsuario.Usuario; if (usuario == null) { actionExecutingContext.Controller.TempData["WarningMessage"] = "Usted no posee permisos para visitar la aplicación "; var url = actionExecutingContext.HttpContext.Request.RawUrl; actionExecutingContext.Result = new RedirectResult("/Account/LogOn?returnUrl=" + url); return; } if (!usuario.Activo || !usuario.Rol.Activo) { actionExecutingContext.Controller.TempData["WarningMessage"] = "Usted no posee permisos para visitar la aplicación "; var url = actionExecutingContext.HttpContext.Request.RawUrl; actionExecutingContext.Result = new RedirectResult("/Account/LogOn?returnUrl=" + url); return; } var nombreControlador = actionExecutingContext.ActionDescriptor.ControllerDescriptor.ControllerName; var nombreAccion = actionExecutingContext.ActionDescriptor.ActionName; var permitir = true; var accion = _accionesRepository.ObtenerPorNombre(nombreAccion, nombreControlador); if (accion == null) { var controlador = _controladoresRepository.ObtenerPorNombre(nombreControlador); if (controlador == null) { controlador = new Controlador() { Descripcion = nombreControlador + " creado automaticamente.", Nombre = nombreControlador, }; _controladoresRepository.Guardar(controlador); } accion = new Accion() { IdControlador = controlador.Id, Descripcion = Utilidades.CamelToTitleCase(nombreAccion) + ", " + Utilidades.CamelToTitleCase(controlador.Nombre) + " creada automaticamente.", NombreAmigable = Utilidades.CamelToTitleCase(nombreAccion), NombreAccion = nombreAccion, EsEtapa = false, ParaMenuLateral = false, Orden = 0 }; _accionesRepository.Guardar(accion); permitir = Utilidades.DebugMode(); } else { permitir = Utilidades.DebugMode() || _permisosRolRepository.PoseePermiso(usuario.IdRol, accion.Id) || _permisosRolRepository.PoseePermisoSideBar(usuario.IdRol, accion.Id); } if (permitir) { SesionUsuario.CurrentNode = SiteMap.Provider.FindSiteMapNode("/" + nombreControlador + "/" + nombreAccion); SesionUsuario.ParentNode = _menuRepository.ObtenerNodoPadre(SesionUsuario.CurrentNode); try { GuardarLog(usuario.Id, accion.Id, actionExecutingContext.ActionParameters); } catch (Exception ex) { XmlConfigurator.Configure(); Log.Error("Ha ocurrido un error al guardar el log en la base de datos. En la ruta " + nombreControlador + "/" + nombreAccion + " error: " + ex.Message); } return; } actionExecutingContext.Controller.TempData["WarningMessage"] = "Usted no posee permisos para acceder a la ruta " + nombreControlador + "/" + nombreAccion; actionExecutingContext.Result = new RedirectResult("/Home/Desautorizado"); }