public Money Calculate(ClientQuenstionForm data) { var c = new BusinessRuleContext(); foreach (var rule in Rules) { c.AddRuleResult(rule.Evaluate(data, c)); } return(c.GetLastResult()); }
public ActionResult ScheduledTask(string EntityName, long BizId) { var user = new InternalUser(); var MainBiz = new BusinessRule(); List <BusinessRule> businessrules = new List <BusinessRule>(); using (var br = new BusinessRuleContext()) { var rolebr = br.BusinessRules.Where(p => p.Roles != null && p.Roles.Length > 0 && !p.Disable).ToList(); MainBiz = rolebr.FirstOrDefault(p => p.Id == BizId); foreach (var rules in rolebr) { if (rules.Roles.Split(",".ToCharArray()).Contains("All")) { businessrules.Add(rules); } } } if (MainBiz != null) { (user).businessrules = businessrules.ToList(); var database = new ApplicationContext(user, 0); var myType = Type.GetType("GeneratorBase.MVC.Models." + EntityName + ""); //var data = GetGenericData(database, myType).ToListAsync(); //foreach (var item in data.Result) var data = GetTableObject(database, EntityName); var dataList = (IQueryable <object>)data; foreach (var item in dataList.ToList()) { if (ApplyRule.CheckRule <object>(item, MainBiz, MainBiz.EntityName)) { database.Entry(item).State = EntityState.Modified; database.SaveChanges(); } } ScheduledTaskHistoryContext sthcontext = new ScheduledTaskHistoryContext(); var itemhistory = sthcontext.ScheduledTaskHistorys.FirstOrDefault(p => p.BusinessRuleId == MainBiz.Id); itemhistory.Status = "Processed"; sthcontext.Entry(itemhistory).State = EntityState.Modified; sthcontext.SaveChanges(); RegisterScheduledTask nexttask = new RegisterScheduledTask(); nexttask.RegisterTask(MainBiz.EntityName, MainBiz.Id); } return(Json("Success", "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet)); }
public override Task <HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) { bool isCorsRequest = controllerContext.Request.Headers.Contains(Origin); bool isPreflightRequest = controllerContext.Request.Method == HttpMethod.Options; TokenServicesController provider = new TokenServicesController(); if (controllerContext.Request.Headers.Contains(Token)) { var tokenValue = controllerContext.Request.Headers.GetValues(Token).FirstOrDefault(); if (tokenValue == null || (provider != null && !provider.ValidateToken(tokenValue))) { var responseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Invalid Request" }; controllerContext.Request.CreateResponse(responseMessage); } else { ApplicationContext db1 = new ApplicationContext(new SystemUser()); var _tokenInfo = db1.ApiTokens.FirstOrDefault(p => p.T_AuthToken == tokenValue); var _userId = _tokenInfo.T_UsersID; ApplicationDbContext userdb = new ApplicationDbContext(); var _userInfo = userdb.Users.FirstOrDefault(p => p.Id == _userId); ApiUser _apiuser = new ApiUser(_userInfo.UserName); _apiuser.JavaScriptEncodedName = _userInfo.Email; var roles = _apiuser.GetRoles(); var isAdmin = _apiuser.IsAdminUser(); _apiuser.IsAdmin = isAdmin; _apiuser.userroles = roles.ToList(); List <Permission> permissions = new List <Permission>(); using (var pc = new PermissionContext()) { // so we only make one database call instead of one per entity? var rolePermissions = pc.Permissions.Where(p => roles.Contains(p.RoleName)).ToList(); foreach (var entity in GeneratorBase.MVC.ModelReflector.Entities) { var calculated = new Permission(); var raw = rolePermissions.Where(p => p.EntityName == entity.Name); calculated.EntityName = entity.Name; calculated.CanEdit = isAdmin || raw.Any(p => p.CanEdit); calculated.CanDelete = isAdmin || raw.Any(p => p.CanDelete); calculated.CanAdd = isAdmin || raw.Any(p => p.CanAdd); calculated.CanView = isAdmin || raw.Any(p => p.CanView); calculated.IsOwner = raw.Any(p => p.IsOwner != null && p.IsOwner.Value); if (!isAdmin) { calculated.SelfRegistration = raw.Any(p => p.SelfRegistration != null && p.SelfRegistration.Value); } else { calculated.SelfRegistration = false; } if (calculated.IsOwner != null && calculated.IsOwner.Value) { calculated.UserAssociation = raw.FirstOrDefault().UserAssociation; } else { calculated.UserAssociation = string.Empty; } //FLS if (!isAdmin) { var listEdit = raw.Select(p => p.NoEdit).ToList(); var listView = raw.Select(p => p.NoView).ToList(); var resultEdit = ""; var resultView = ""; foreach (var str in listEdit) { if (str != null) { resultEdit += str; } } foreach (var str in listView) { if (str != null) { resultView += str; } } calculated.NoEdit = resultEdit; calculated.NoView = resultView; } // permissions.Add(calculated); } } _apiuser.permissions = permissions; List <BusinessRule> businessrules = new List <BusinessRule>(); using (var br = new BusinessRuleContext()) { var rolebr = br.BusinessRules.Where(p => p.Roles != null && p.Roles.Length > 0 && !p.Disable && p.AssociatedBusinessRuleTypeID != 5).ToList(); foreach (var rules in rolebr) { if (_apiuser.IsInRole(rules.Roles.Split(",".ToCharArray()))) { businessrules.Add(rules); } } } _apiuser.businessrules = new List <BusinessRule>();//businessrules.ToList(); User = _apiuser; db = new ApplicationContext(_apiuser); if (isCorsRequest) { if (isPreflightRequest) { var response = new HttpResponseMessage(HttpStatusCode.OK); response.Headers.Add(AccessControlAllowOrigin, (controllerContext.Request.Headers.GetValues(Origin).First())); string accessControlRequestMethod = controllerContext.Request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault(); if (accessControlRequestMethod != null) { response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod); } string requestedHeaders = string.Join(", ", controllerContext.Request.Headers.GetValues(AccessControlRequestHeaders)); if (!string.IsNullOrEmpty(requestedHeaders)) { response.Headers.Add(AccessControlAllowHeaders, requestedHeaders); } var tcs = new TaskCompletionSource <HttpResponseMessage>(); tcs.SetResult(response); return(tcs.Task); } return(base.ExecuteAsync(controllerContext, cancellationToken).ContinueWith(t => { HttpResponseMessage resp = t.Result; resp.Headers.Add(Token, controllerContext.Request.Headers.GetValues(Token).First()); return resp; })); // } } return(base.ExecuteAsync(controllerContext, cancellationToken).ContinueWith(t => { HttpResponseMessage resp = t.Result; resp.Headers.Add(Token, controllerContext.Request.Headers.GetValues(Token).First()); return resp; })); } else { return(base.ExecuteAsync(controllerContext, cancellationToken).ContinueWith(t => { HttpResponseMessage resp = t.Result; resp.StatusCode = HttpStatusCode.NotFound; resp.ReasonPhrase = "Unauthorized access !"; return resp; })); } }
protected void Application_AuthorizeRequest(Object sender, EventArgs e) { if (User.Identity.IsAuthenticated) { var roles = ((CustomPrincipal)User).GetRoles(); var isAdmin = ((CustomPrincipal)User).IsAdminUser(); List <Permission> permissions = new List <Permission>(); ((CustomPrincipal)User).IsAdmin = isAdmin; List <PermissionAdminPrivilege> adminprivilegeslist = new List <PermissionAdminPrivilege>(); ((CustomPrincipal)User).userroles = roles.ToList(); using (var pc = new PermissionContext()) { // so we only make one database call instead of one per entity? var rolePermissions = pc.Permissions.Where(p => roles.Contains(p.RoleName)).ToList(); var adminprivileges = pc.AdminPrivileges.Where(p => roles.Contains(p.RoleName)).ToList(); foreach (var item in (new AdminFeaturesDictionary()).getDictionary()) { var adminprivilege = new PermissionAdminPrivilege(); var raw = adminprivileges.Where(p => p.AdminFeature == item.Key); adminprivilege.AdminFeature = item.Key; adminprivilege.IsAllow = isAdmin || raw.Any(p => p.IsAllow); adminprivilege.IsAdd = isAdmin || raw.Any(p => p.IsAdd); adminprivilege.IsEdit = isAdmin || raw.Any(p => p.IsEdit); adminprivilege.IsDelete = isAdmin || raw.Any(p => p.IsDelete); adminprivilegeslist.Add(adminprivilege); } ((CustomPrincipal)User).adminprivileges = adminprivilegeslist; foreach (var entity in GeneratorBase.MVC.ModelReflector.Entities) { var calculated = new Permission(); var raw = rolePermissions.Where(p => p.EntityName == entity.Name); calculated.EntityName = entity.Name; calculated.CanEdit = isAdmin || raw.Any(p => p.CanEdit); calculated.CanDelete = isAdmin || raw.Any(p => p.CanDelete); calculated.CanAdd = isAdmin || raw.Any(p => p.CanAdd); calculated.CanView = isAdmin || raw.Any(p => p.CanView); calculated.IsOwner = raw.Any(p => p.IsOwner != null && p.IsOwner.Value); if (!isAdmin) { calculated.SelfRegistration = raw.Any(p => p.SelfRegistration != null && p.SelfRegistration.Value); } else { calculated.SelfRegistration = false; } if (calculated.IsOwner != null && calculated.IsOwner.Value) { calculated.UserAssociation = raw.FirstOrDefault(p => p.IsOwner != null && p.IsOwner.Value).UserAssociation; } else { calculated.UserAssociation = string.Empty; } //code for verb action security var verblist = raw.Select(x => x.Verbs).ToList(); var verbrolecount = verblist.Count(); List <string> allverbs = new List <string>(); foreach (var verb in verblist) { if (verb != null) { allverbs.AddRange(verb.Split(",".ToCharArray()).ToList()); } } var blockedverbs = allverbs.GroupByMany(p => p); if (blockedverbs.Count() > 0) { calculated.Verbs = string.Join(",", blockedverbs.Select(b => b.Key).ToList()); } else { calculated.Verbs = string.Empty; } // //FLS if (!isAdmin) { var listEdit = raw.Where(p => p.CanEdit).Select(p => p.NoEdit == null ? "" : p.NoEdit).ToList(); var listView = raw.Where(p => p.CanView).Select(p => p.NoView == null ? "" : p.NoView).ToList(); var resultEdit = ""; var resultView = ""; if (listView.Count > 0) { HashSet <string> set = new HashSet <string>(listView[0].Split(',')); foreach (var item in listView.Skip(1)) { set.IntersectWith(item.Split(',')); } resultView = string.Join(",", set); } if (listEdit.Count > 0) { HashSet <string> set = new HashSet <string>(listEdit[0].Split(',')); foreach (var item in listEdit.Skip(1)) { set.IntersectWith(item.Split(',')); } resultEdit = string.Join(",", set); } calculated.NoEdit = resultEdit; calculated.NoView = resultView; } // permissions.Add(calculated); } } ((CustomPrincipal)User).permissions = permissions; List <BusinessRule> businessrules = new List <BusinessRule>(); using (var br = new BusinessRuleContext()) { var rolebr = br.BusinessRules.Where(p => p.Roles != null && p.Roles.Length > 0 && !p.Disable && p.AssociatedBusinessRuleTypeID != 5).ToList(); foreach (var rules in rolebr) { //if ((((CustomPrincipal)User).IsInRole(rules.Roles.Split(",".ToCharArray())))) if (((CustomPrincipal)User).IsInRole(rules.Roles.Split(",".ToCharArray()), roles)) { businessrules.Add(rules); } } } ((CustomPrincipal)User).businessrules = businessrules.ToList(); using (var UBS = new UserBasedSecurityContext()) { ((CustomPrincipal)User).userbasedsecurity = UBS.UserBasedSecurities.ToList(); } List <MultiTenantLoginSelected> appsecurityaccess = new List <MultiTenantLoginSelected>(); using (var appsecurity = new ApplicationDbContext(true)) { var app = appsecurity.MultiTenantLoginSelected.Where(p => p.T_User == ((CustomPrincipal)User).Name); foreach (var rules in app) { appsecurityaccess.Add(rules); } //((CustomPrincipal)User).extraMultitenantPriviledges = appsecurity.MultiTenantExtraAccess.Where(p => p.T_User == ((CustomPrincipal)User).Name && p.T_MainEntityID.HasValue).Select(p => p.T_MainEntityID.Value).ToList(); } ((CustomPrincipal)User).MultiTenantLoginSelected = appsecurityaccess.ToList(); } }
public ActionResult NotifyOneTime(string EntityName, long Id, long actionid, string userName) { var AppName = CommonFunction.Instance.AppName(); var server = CommonFunction.Instance.Server(); string NotifyTo = ""; string NotifyToExtra = ""; string NotifyToRole = ""; string emailTo = ""; var alertMessage = ""; var ruleactiondb = new RuleActionContext(); var act = ruleactiondb.RuleActions.First(p => p.Id == actionid); var ruledb = new BusinessRuleContext(); var br = ruledb.BusinessRules.Find(act.RuleActionID); var subject = br.RuleName; alertMessage += act.ErrorMessage; var argslist = act.actionarguments.ToList(); foreach (var args in argslist) { if (args.ParameterName == "NotifyTo") { NotifyTo = args.ParameterValue; } if (args.ParameterName == "NotifyToExtra") { NotifyToExtra = args.ParameterValue; } if (args.ParameterName == "NotifyToRole") { NotifyToRole = args.ParameterValue; } } if (!string.IsNullOrEmpty(userName)) { Type controller = Type.GetType("GeneratorBase.MVC.Controllers." + EntityName + "Controller"); object objController = Activator.CreateInstance(controller, null); MethodInfo mc = controller.GetMethod("GetRecordById"); object[] MethodParams = new object[] { Convert.ToString(Id) }; var entry = mc.Invoke(objController, MethodParams); getEmail objgetEmail = new getEmail(); var emails1 = objgetEmail.getEmailids(new SystemUser(), NotifyTo.Split(",".ToCharArray()), entry, NotifyToRole.Split(",".ToCharArray()), userName); emailTo = emails1; if (!string.IsNullOrEmpty(NotifyToRole)) { emailTo += "," + objgetEmail.getUserEmailidsFromRoles(NotifyToRole.Split(",".ToCharArray())); } } if (!string.IsNullOrEmpty(NotifyToExtra)) { emailTo += "," + NotifyToExtra; } emailTo = emailTo.Trim(','); emailTo = emailTo.Trim().TrimEnd(",".ToCharArray()); emailTo = emailTo.Replace(",,", ","); // if (alertMessage.ToUpper().Contains("###RECORD###")) { try { Type controller1 = Type.GetType("GeneratorBase.MVC.Controllers." + EntityName + "Controller"); object objController1 = Activator.CreateInstance(controller1, null); MethodInfo mc1 = controller1.GetMethod("GetRecordById_Reflection"); object[] MethodParams1 = new object[] { Convert.ToString(Id) }; var msgDetails1 = Convert.ToString(mc1.Invoke(objController1, MethodParams1)); alertMessage = alertMessage.Replace("###Record###", msgDetails1); } catch { } } if (alertMessage.ToUpper().Contains("###RECORDLINK###")) { alertMessage = alertMessage.Replace("###RecordLink###", "<a href=\"" + "http://" + server + Url.Action("Edit", EntityName, new { Id = Id }) + "\">Link</a>"); //alertMessage += "<br/><a href=\"" + "http://" + server + Url.Action("Edit", EntityName, new { Id = Id }) + "\">Click to review</a>"; } if (!string.IsNullOrEmpty(emailTo)) { SendEmail mail = new SendEmail(); var EmailTemplate = (new ApplicationContext(new SystemUser())).EmailTemplates.FirstOrDefault(e => e.associatedemailtemplatetype.DisplayValue == "Business Rule"); if (EmailTemplate != null) { string mailbody = string.Empty; if (!string.IsNullOrEmpty(EmailTemplate.EmailContent)) { mailbody = EmailTemplate.EmailContent; mailbody = mailbody.Replace("###Message###", alertMessage); } if (!string.IsNullOrEmpty(EmailTemplate.EmailSubject)) { subject = EmailTemplate.EmailSubject; } emailTo = string.Join(",", emailTo.Split(',').Distinct().ToArray()); mail.Notify("", emailTo, mailbody, subject); } } return(null); }
public Money Evaluate(ClientQuenstionForm data, BusinessRuleContext context) { return(context.GetLastResult() + data.MonthlyLivingCosts * CredibilityPolicy.MaxCreditLengthInMonths); }
public Money Evaluate(ClientQuenstionForm data, BusinessRuleContext context) { return(context.GetLastResult() + data.PeopleSupported * (int)(1 - 0.25 * (data.PeopleSupported - 1))); }