public ActionResult Index() { if (Request.IsAuthenticated) { //Получаем идентификатор текущего пользователя using (ApplicationDbContext aspdb = new ApplicationDbContext()) { using (RoleManager <ApplicationRole> roleManager = new RoleManager <ApplicationRole>(new RoleStore <ApplicationRole>(aspdb))) { var _UserId = System.Web.HttpContext.Current.User.Identity.GetUserId(); ApplicationRole currentRole = roleManager.FindById(aspdb.Users.FirstOrDefault(x => x.Id == _UserId).Roles.FirstOrDefault().RoleId); @ViewData["FirstName"] = aspdb.Users.FirstOrDefault(x => x.Id == _UserId).FirstName.ToString(); @ViewData["UserName"] = aspdb.Users.FirstOrDefault(x => x.Id == _UserId).UserName.ToString(); @ViewData["UserRole"] = currentRole.Description.ToString(); } } using (FRModel db = new FRModel()) { db.Database.Log = (s => System.Diagnostics.Debug.WriteLine(s)); List <int> WorkerIdsList = UsrWksMethods.GetWorkerId(db); // Получаем ID связанных сотрудников для пользователя в роли "Руководитель проекта" //Количество действующих проектов @ViewData["PrjCount"] = db.Projects.Where(x => (x.EndDateFact == null) && (WorkerIdsList.FirstOrDefault() == -1 || WorkerIdsList.Contains(x.Chief ?? 0))) .Count(); } } return(View()); }
// Метод определения идентификатора связанного сотрудника // для текущего пользователя системы в роли "Руководитель проекта" public static List <int> GetWorkerId(FRModel db) { // Проверяем принадлежность текущего пользователя к роли "Руководитель проекта" bool isPrgManager = System.Web.HttpContext.Current.User.IsInRole("ProjectManager"); // Флаг для отмены фильтрации по руководителю проекта в запросе. // Если текущий пользователь не принадлежит к роли "Руководитель проекта" - // возвращаем один элемент списка со значением "-1". List <int> WorkerIdsList = new List <int>() { -1 }; //Если в системных настройках включен параметр "Разрешить руководителям проектов доступ ко всем проектам" - //возвращаем "-1" (фильтрация не выполняется) var _PM_access_all_projects = db.Settings.FirstOrDefault(x => x.SettingName == "PM_access_all_projects"); if (_PM_access_all_projects != null) { if (Convert.ToBoolean(_PM_access_all_projects.SettingValue.ToString())) { return(WorkerIdsList); } } if (isPrgManager) { //Получаем идентификатор текущего пользователя var user = System.Web.HttpContext.Current.User.Identity.GetUserId(); //Получаем список связанных сотрудников WorkerIdsList = db.UsrWksRelations.Where(x => x.UserId == user).Select(x => x.WorkerId).ToList(); } return(WorkerIdsList); }
public override void OnActionExecuted(ActionExecutedContext filterContext) { var request = filterContext.HttpContext.Request; bool?_resbool = null; if ((string)filterContext.Controller.TempData["LoginResult"] == "Success") { _resbool = true; } if ((string)filterContext.Controller.TempData["LoginResult"] == "Failure") { _resbool = false; } using (FRModel db = new FRModel()) { try { AspVisitor visitor = new AspVisitor() { Login = filterContext.Controller.TempData["LoginName"].ToString(), Ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? request.UserHostAddress, Url = filterContext.Controller.TempData["ReturnUrl"].ToString(), Password = filterContext.Controller.TempData["Password"].ToString(), Result = _resbool, Date = DateTime.Now, }; db.AspVisitors.Add(visitor); db.SaveChanges(); } catch (Exception) { return; } } base.OnActionExecuted(filterContext); }
// Метод определения наличия прав доступа к данной сущности у текущего пользователя // на основании сопоставления пользователей системы сотрудникам public static bool isAllowed(FRModel db, int PrjId) { db.Database.Log = (s => System.Diagnostics.Debug.WriteLine(s)); //Debug Information==================== //Если в системных настройках включен параметр "Разрешить руководителям проектов доступ ко всем проектам" - //возвращаем "true" (фильтрация не выполняется) var _PM_access_all_projects = db.Settings.FirstOrDefault(x => x.SettingName == "PM_access_all_projects"); if (_PM_access_all_projects != null) { if (Convert.ToBoolean(_PM_access_all_projects.SettingValue.ToString())) { return(true); } } // Проверяем принадлежность текущего пользователя к роли "Руководитель проекта" bool isPrgManager = System.Web.HttpContext.Current.User.IsInRole("ProjectManager"); if (!isPrgManager) { return(true); //Разрешаем доступ к сущности } else { //Получаем идентификатор текущего пользователя var user = System.Web.HttpContext.Current.User.Identity.GetUserId(); //Проверяем наличие сопоставления текущего пользователя системы руководителю указанного проекта int?_wksCount = (from _prj in db.Projects join _usrwks in db.UsrWksRelations on _prj.Chief equals _usrwks.WorkerId where _prj.id == PrjId && _usrwks.UserId == user select _usrwks.WorkerId).ToList().Count(); bool result = _wksCount > 0 ? true : false; return(result); } }
public ActionResult GetLogins() { try { using (FRModel visitorcontext = new FRModel()) { visitorcontext.Database.Log = (s => System.Diagnostics.Debug.WriteLine(s)); //Debug Information==================== var draw = Request.Form.GetValues("draw").FirstOrDefault(); var start = Request.Form.GetValues("start").FirstOrDefault(); var length = Request.Form.GetValues("length").FirstOrDefault(); var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault(); var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault(); int pageSize = length != null?Convert.ToInt32(length) : 0; int skip = start != null?Convert.ToInt32(start) : 0; int totalRecords = 0; string _login = Request.Form.GetValues("columns[0][search][value]").FirstOrDefault().ToString(); string _ip = Request.Form.GetValues("columns[1][search][value]").FirstOrDefault().ToString(); string _url = Request.Form.GetValues("columns[2][search][value]").FirstOrDefault().ToString(); string _resulttext = Request.Form.GetValues("columns[3][search][value]").FirstOrDefault().ToString(); bool _result = true; bool.TryParse(_resulttext, out _result); // Парсинг диапазона дат из DateRangePicker DateTime?_startdate = null; DateTime?_enddate = null; string _datetext = Request.Form.GetValues("columns[4][search][value]").FirstOrDefault().ToString(); if (!string.IsNullOrEmpty(_datetext)) { _datetext = _datetext.Trim(); int _length = (_datetext.Length) - (_datetext.IndexOf('-') + 2); string _startagrdatetext = _datetext.Substring(0, _datetext.IndexOf('-')).Trim(); string _endagrdatetext = _datetext.Substring(_datetext.IndexOf('-') + 2, _length).Trim(); _startdate = DateTime.Parse(_startagrdatetext); _enddate = DateTime.Parse(_endagrdatetext); _enddate = _enddate.Value.AddHours(23).AddMinutes(59).AddSeconds(59); } //-------------------------- var _la = (from visitor in visitorcontext.AspVisitors where ( (string.IsNullOrEmpty(_login) || visitor.Login.Contains(_login)) && (string.IsNullOrEmpty(_ip) || visitor.Ip.Contains(_ip)) && (string.IsNullOrEmpty(_url) || visitor.Url.Contains(_url)) && (string.IsNullOrEmpty(_ip) || visitor.Ip.Contains(_ip)) && (string.IsNullOrEmpty(_resulttext) || visitor.Result == _result) && (string.IsNullOrEmpty(_datetext) || visitor.Date >= _startdate && visitor.Date <= _enddate) //Диапазон дат ) select new { Id = visitor.Id, Login = visitor.Login, Password = visitor.Password, Ip = visitor.Ip, Url = visitor.Url, Result = visitor.Result, Date = visitor.Date }).AsEnumerable().Select(x => new AspVisitor { Id = x.Id, Login = x.Login, Password = x.Password, Ip = x.Ip, Url = x.Url, Result = x.Result, Date = x.Date }).ToList(); if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir))) { _la = _la.OrderBy(sortColumn + " " + sortColumnDir + ", Id desc").ToList(); } else { _la = _la.OrderByDescending(x => x.Date).ThenByDescending(x => x.Id).ToList(); } totalRecords = _la.Count(); var data = _la.Skip(skip).Take(pageSize); return(Json(new { result = true, draw = draw, recordsFiltered = totalRecords, recordsTotal = totalRecords, data = data }, JsonRequestBehavior.AllowGet)); } } catch (Exception ex) { return(Json(new { result = false, message = "Ошибка выполнения запроса! " + ex.Message }, JsonRequestBehavior.AllowGet)); } }