public MgUserController(congthongtinContext context)
 {
     this.db = context;
 }
Beispiel #2
0
 public MgRoleController(congthongtinContext context)
 {
     this.db = context;
 }
 public LoginModel()
 {
     db = new congthongtinContext();
 }
Beispiel #4
0
        public static void SyncTbRoutes()
        {
            congthongtinContext db = new congthongtinContext();
            List <string>       listControllerSkipRoutes = new List <string>()
            {
                "Logout", "GetCaptcha", "Home", "Login"
            };
            var rt = new List <TbRoute>();

            var assembly = Assembly.GetExecutingAssembly();
            //var types = assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(Controller)) && t.IsPublic && !t.IsAbstract);
            var tt = assembly.GetTypes().Where(m => m.IsSubclassOf(typeof(Controller)) && m.IsPublic && !m.IsAbstract);

            foreach (var type in tt)
            {
                string _namespace      = type.Namespace;
                string _controllerName = type.Name.Substring(0, type.Name.IndexOf("Controller", System.StringComparison.InvariantCulture));

                if (!listControllerSkipRoutes.Contains(_controllerName)) //Bỏ qua các controller trong danh sách không thêm vào route
                {
                    if (type.CustomAttributes.Where(c => c.AttributeType == typeof(Permission)).Any())
                    {
                        var methods = type.GetMethods().Where(x => x.IsPublic && x.DeclaringType.Equals(type));
                        foreach (var method in methods)
                        {
                            string _actionName = method.Name;
                            rt.Add(new TbRoute()
                            {
                                Namespace      = _namespace,
                                ControllerName = _controllerName,
                                ActionName     = _actionName,
                                Name           = _actionName
                            });
                        }
                    }
                    else
                    {
                        var methods = type.GetMethods()
                                      .Where(x => x.CustomAttributes.Where(c => c.AttributeType == typeof(Permission)).Any() && x.IsPublic && x.DeclaringType.Equals(type));
                        foreach (var method in methods)
                        {
                            string _actionName = method.Name;
                            rt.Add(new TbRoute()
                            {
                                Namespace      = _namespace,
                                ControllerName = _controllerName,
                                ActionName     = _actionName,
                                Name           = _actionName
                            });
                        }
                    }
                }
            }

            //Remove route from db when non exist in new list route
            db.TbRoute
            .AsEnumerable()
            .Where(p => !rt.Any(p2 => p2.Namespace == p.Namespace && p2.ControllerName == p.ControllerName && p2.ActionName == p.ActionName))
            .ToList()
            .All(p =>
            {
                db.TbRoute.Remove(p);
                db.SaveChanges();
                return(true);
            });

            //Add route from new list route when non exist in db
            rt.Where(p => !db.TbRoute.Any(p2 => p2.Namespace == p.Namespace && p2.ControllerName == p.ControllerName && p2.ActionName == p.ActionName))
            .All(p =>
            {
                db.TbRoute.Add(p);
                db.SaveChanges();
                return(true);
            });

            //Remove action from db when non exist in new list page
            db.TbAction
            .AsEnumerable()
            .Where(p => !rt.GroupBy(p2 => new
            {
                p2.Namespace,
                p2.ControllerName,
                p2.ActionName
            }, p2 => p2, (key, g) => new
            {
                key,
                g
            })
                   .Any(p2 => p2.key.Namespace == p.Namespace && p2.key.ControllerName == p.ControllerName && p2.key.ActionName == p.Action))
            .ToList()
            .All(p =>
            {
                db.TbAction.Remove(p);
                db.SaveChanges();
                return(true);
            });

            //Remove controller from db when non exist in new list page
            db.TbController
            .AsEnumerable()
            .Where(p => !rt.GroupBy(p2 => new
            {
                p2.Namespace,
                p2.ControllerName
            }, p2 => p2, (key, g) => new
            {
                key,
                g
            })
                   .Any(p2 => (p2.key.Namespace == p.Namespace && p2.key.ControllerName == p.Controller) || (p.ParentId == null && p.Level == 1)))
            .ToList()
            .All(p =>
            {
                db.TbController.Remove(p);
                db.SaveChanges();
                return(true);
            });

            //Add action from new list page when non exist in db
            rt.GroupBy(p2 => new
            {
                p2.Namespace,
                p2.ControllerName,
                p2.ActionName
            }, p2 => p2, (key, g) => new
            {
                key,
                g
            }).Where(p2 => !db.TbAction.Any(p => p2.key.Namespace == p.Namespace && p2.key.ControllerName == p.ControllerName && p2.key.ActionName == p.Action))
            .ToList().ForEach(p =>
            {
                var ctrl      = db.TbController.FirstOrDefault(ct => ct.Namespace == p.key.Namespace && ct.Controller == p.key.ControllerName);
                var newAction = new TbAction()
                {
                    Action         = p.key.ActionName,
                    Name           = p.key.ActionName,
                    Display        = p.key.ActionName,
                    Url            = "/" + p.key.ActionName,
                    Namespace      = p.key.Namespace,
                    ControllerName = p.key.ControllerName,
                    IsActive       = true,
                    IsDelete       = false
                };
                if (ctrl != null)
                {
                    newAction.Controller = ctrl;
                }
                else
                {
                    newAction.Controller = new TbController()
                    {
                        Controller = p.key.ControllerName,
                        Name       = p.key.ControllerName,
                        Display    = p.key.ControllerName,
                        Namespace  = p.key.Namespace,
                        Url        = "/admin/" + p.key.ControllerName,
                        Level      = 2,
                        ParentId   = 1,
                        IsActive   = true,
                        IsDelete   = false
                    };
                }

                db.TbAction.Add(newAction);

                db.SaveChanges();
            });
        }
 public HomeController(congthongtinContext context)
 {
     db = context;
 }
Beispiel #6
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var    actionResult   = ((ControllerActionDescriptor)filterContext.ActionDescriptor).MethodInfo.ReturnType;
            string actionName     = ((ControllerActionDescriptor)filterContext.ActionDescriptor).ActionName;
            string controllerName = ((ControllerActionDescriptor)filterContext.ActionDescriptor).ControllerName;
            string currentUrl     = filterContext.HttpContext.Request.Path;

            Controller controller = filterContext.Controller as Controller;

            //Validate
            var descriptor = filterContext.ActionDescriptor as ControllerActionDescriptor;

            //if (descriptor != null)
            //{
            //    var parameters = descriptor.MethodInfo.GetParameters();
            //    foreach (var parameter in parameters)
            //    {
            //        var argument = filterContext.ActionArguments[parameter.Name];
            //        EvaluateValidationAttributes(parameter, argument, controller.ViewData.ModelState);
            //    }
            //}
            if (!controller.ViewData.ModelState.IsValid)
            {
                List <validateObject>       validationErrors = new List <validateObject>();
                Dictionary <string, string> validationD      = new Dictionary <string, string>();
                foreach (var item in controller.ViewData.ModelState)
                {
                    string key    = item.Key;
                    var    errors = item.Value.Errors;

                    foreach (var error in errors)
                    {
                        if (!string.IsNullOrEmpty(error.ErrorMessage))
                        {
                            //var msg = error.ErrorMessage;
                            var msg = String.Format("Xin mời nhập {0}", key);
                            validationErrors.Add(new validateObject
                            {
                                PropertyName = key,
                                ErrorMessage = msg
                            });
                        }
                    }
                }
                //Xét action result (JsonResult || ActionResult)
                if (actionResult.Name == "JsonResult")
                {
                    var resSubmit = new ResSubmit(false, "ValidateError");
                    resSubmit.extend     = validationErrors;
                    filterContext.Result = new ObjectResult(resSubmit);
                }
                if (actionResult.Name == "IActionResult")
                {
                    controller.ViewBag.Error = validationErrors;
                }
            }
            //End Validate

            //Tạo Dictionary lỗi ngoại lệ
            using (congthongtinContext db = new congthongtinContext())
            {
                var listException = db.TbException.FromSqlRaw("exec [dbo].[getException]").ToList();
                controller.ViewBag.SettingEx = listException.ToDictionary(x => x.Key, x => x.ValueVi);
            }
            //End tạo dictionary

            //Ghi nhớ đăng nhập
            var ckRemember = filterContext.HttpContext.Request.Cookies["userRemember"];

            if (ckRemember != null)
            {
                var info = Utils.Decrypt(ckRemember, "cookie").Split(',');

                if (info[0] == "on")
                {
                    var idUs     = Int32.Parse(info[1]);
                    var userName = info[2];
                    using (var db = new congthongtinContext())
                    {
                        TbUser user = db.TbUser.FirstOrDefault(us => us.Id == idUs && us.UserName == userName && us.IsActive == true);
                        if (user != null)
                        {
                            filterContext.HttpContext.Session.SetString("AccountSession", JsonConvert.SerializeObject(new AccountSession()
                            {
                                Id = user.Id, UserName = user.UserName != null ? user.UserName : user.Email, RoleGroupId = user.RoleGroupId, FullName = user.FullName
                            }));
                        }
                    }
                }
            }
            //End cookie ghi nhớ đăng nhập

            //Check session
            List <string> actionSkip = new List <string>()
            {
                "Logout", "GetCaptcha"
            };
            var acSession = filterContext.HttpContext.Session.GetString("AccountSession");

            if (acSession == null && controllerName != "Login")
            {
                switch (actionResult.Name)
                {
                case "JsonResult":
                    var resSubmit = new ResSubmit(false, "Bạn cần đăng nhập!");
                    filterContext.Result = new ObjectResult(resSubmit);
                    break;

                case "IActionResult":
                    filterContext.Result = new RedirectResult("admin/Login?url=" + currentUrl);
                    break;
                }
            }
            else
            {
                if (controllerName != "Login" && !actionSkip.Contains(actionName))
                {
                    AccountSession sessionAccount = acSession == null ? default(AccountSession) : JsonConvert.DeserializeObject <AccountSession>(acSession);
                    using (var db = new congthongtinContext())
                    {
                        TbUser user = db.TbUser.FirstOrDefault(us => us.Id == sessionAccount.Id && us.UserName == sessionAccount.UserName && us.IsActive == true);
                        if (user == null)
                        {
                            filterContext.Result = new RedirectResult("admin/Login?url=" + currentUrl);
                        }
                        else
                        {
                            if (user.UserName != "admin1234$#@!")
                            {
                                var route = db.TbRoute.Where(m => m.Namespace == "CongThongTin.Areas.Admin.Controllers" &&
                                                             m.ControllerName == controllerName &&
                                                             m.ActionName == actionName).FirstOrDefault();
                                if (route != null)
                                {
                                    var idG  = user.RoleGroupId;
                                    var role = db.TbRoleGroup.Where(m => m.Id == idG).FirstOrDefault();
                                    if (role == null)
                                    {
                                        switch (actionResult.Name)
                                        {
                                        case "JsonResult":
                                            var jsonResult = new ResSubmit(false, "Tài khoản không đủ quyền thực hiện hành động!");
                                            filterContext.Result = new ObjectResult(jsonResult);
                                            //filterContext.HttpContext.Response.StatusCode = 205;
                                            break;

                                        case "IActionResult":
                                            filterContext.Result = new ViewResult
                                            {
                                                //MasterName = "~/Areas/Admin/Views/Layout/AdminLayout.cshtml",
                                                ViewName = "~/Areas/Admin/Views/AccessDenied/Index2.cshtml",
                                                //ViewData = filterContext.Controller.ViewData,
                                                //TempData = filterContext.Controller.TempData
                                            };
                                            break;

                                        default:
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            //End check session

            base.OnActionExecuting(filterContext);
        }
 public MgModulController(congthongtinContext context)
 {
     this.db = context;
 }