Exemplo n.º 1
0
        public Money Calculate(ClientQuenstionForm data)
        {
            var c = new BusinessRuleContext();

            foreach (var rule in Rules)
            {
                c.AddRuleResult(rule.Evaluate(data, c));
            }

            return(c.GetLastResult());
        }
Exemplo n.º 2
0
        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;
                }));
            }
        }
Exemplo n.º 4
0
        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();
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public Money Evaluate(ClientQuenstionForm data, BusinessRuleContext context)
 {
     return(context.GetLastResult() + data.MonthlyLivingCosts * CredibilityPolicy.MaxCreditLengthInMonths);
 }
Exemplo n.º 7
0
 public Money Evaluate(ClientQuenstionForm data, BusinessRuleContext context)
 {
     return(context.GetLastResult() + data.PeopleSupported * (int)(1 - 0.25 * (data.PeopleSupported - 1)));
 }