public virtual void OnAuthentication(AuthenticationContext filterContext)
        {
            var roles = new List <WamsRole>();

            roles.Add(new WamsRole
            {
                EducationOrganizationId = Constants.DPI,
                AgencyName = "DPI",
                Role       = "AllFunctions",
                Privileges = new List <WisePrivilege> {
                    WisePrivilege.EditAgreement, WisePrivilege.EditCredential, WisePrivilege.EditVendorSubscription, WisePrivilege.ViewCredentials, WisePrivilege.ViewReport, WisePrivilege.ViewMonitoring
                }
            });
            roles.Add(new WamsRole
            {
                EducationOrganizationId = Constants.DPI,
                AgencyName = "DPI",
                Role       = "Vendor",
                Privileges = new List <WisePrivilege> {
                    WisePrivilege.ViewCredentials, WisePrivilege.ViewMonitoring
                }
            });
            roles.Add(new WamsRole
            {
                EducationOrganizationId = 2,
                AgencyName = "Test Agency 2",
                Role       = "Agency",
                Privileges = new List <WisePrivilege> {
                    WisePrivilege.EditAgreement, WisePrivilege.EditVendorSubscription
                }
            });
            var wamsPrincipal = new WamsPrincipal("1234567890", "Demo", "User", "*****@*****.**", roles);

            _sessionInfo.User = wamsPrincipal;

            _sessionInfo.SetCurrentAgency(Constants.DPI);

            filterContext.HttpContext.User        = wamsPrincipal;
            filterContext.Controller.ViewBag.User = wamsPrincipal;
        }
예제 #2
0
        public void OnAuthentication(AuthenticationContext filterContext)
        {
            var wamsUser = (WamsPrincipal)filterContext.RequestContext.HttpContext.User;
            var agencies = wamsUser.Roles
                           .Select(x => x.EducationOrganizationId)
                           .Distinct()
                           .ToList();

            if (_sessionInfo.CurrentAgencyId == null)
            {
                if (agencies.Count() == 1)
                {
                    var edOrgId = wamsUser.Roles.First().EducationOrganizationId;
                    var agency  = _odsBusiness.GetEducationOrganization(Convert.ToInt32(edOrgId));

                    _sessionInfo.SetCurrentAgency(edOrgId);
                    filterContext.Controller.ViewBag.DefaultAgency = agency.NameOfInstitution;
                }
                else
                {
                    var area       = (string)filterContext.RouteData.DataTokens["area"];
                    var controller = (string)filterContext.RouteData.Values["controller"];
                    var action     = (string)filterContext.RouteData.Values["action"];
                    if (controller.Equals("Debug", StringComparison.InvariantCultureIgnoreCase) ||
                        (
                            area.IsNullOrWhiteSpace() &&
                            controller.Equals("WamsUser", StringComparison.InvariantCultureIgnoreCase) &&
                            (action.Equals("Index", StringComparison.InvariantCultureIgnoreCase) || action.Equals("ChangeAgency", StringComparison.InvariantCultureIgnoreCase)))
                        )
                    {
                        return;
                    }

                    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                    {
                        { "area", "" },
                        { "controller", "WamsUser" },
                        { "action", "Index" }
                    });
                }
            }
            else
            {
                var agency = _odsBusiness.GetEducationOrganization(_sessionInfo.CurrentAgencyId.GetValueOrDefault());
                filterContext.Controller.ViewBag.DefaultAgency = agency != null ? agency.NameOfInstitution : "";
            }

            if (_sessionInfo.CurrentAgencyId.HasValue)
            {
                var impersonateAgencyPrivilege = "EditCredential";
                var dpiAgencyKey = Constants.DPI;

                var privileges = wamsUser.GetPrivileges(_sessionInfo.CurrentAgencyId.GetValueOrDefault());
                filterContext.Controller.ViewBag.Privileges     = privileges;
                filterContext.Controller.ViewBag.MultipleAgency = agencies.Count() > 1 || wamsUser.HasPrivilege(dpiAgencyKey, impersonateAgencyPrivilege);

                filterContext.Controller.ViewData[Constants.CAN_USER_VIEW_REPORT]              = privileges.Contains(WisePrivilege.ViewReport);
                filterContext.Controller.ViewData[Constants.CAN_USER_EDIT_CREDENTIAL]          = privileges.Contains(WisePrivilege.EditCredential);
                filterContext.Controller.ViewData[Constants.CAN_USER_EDIT_VENDOR_SUBSCRIPTION] = privileges.Contains(WisePrivilege.EditVendorSubscription);
                filterContext.Controller.ViewData[Constants.CAN_USER_VIEW_CREDENTIALS]         = privileges.Contains(WisePrivilege.ViewCredentials);
            }
        }
예제 #3
0
 public ActionResult ChangeAgency(int id)
 {
     _sessionInfo.SetCurrentAgency(id);
     return(RedirectToAction("Index", "Home"));
 }
        public void OnAuthentication(AuthenticationContext filterContext)
        {
            var wamsUser = (WamsPrincipal)filterContext.RequestContext.HttpContext.User;

            if (wamsUser == null)
            {
                _log.Error($"{wamsUser} is null");

                filterContext.Result = SevereError();
                return;
            }

            var agencies = wamsUser.Roles
                           .Select(x => x.EducationOrganizationId)
                           .Distinct()
                           .ToList();

            if (!agencies.Any())
            {
                _log.Error($"{wamsUser.FullName} has no agencies");
                filterContext.Result = SevereError();

                return;
            }

            var schoolYear = DateTime.Today.GetSchoolYear();


            _sessionInfo.User = wamsUser;

            if (_sessionInfo.CurrentAgencyId == null)
            {
                if (agencies.Count() == 1)
                {
                    var agencyKey = wamsUser.Roles.First().EducationOrganizationId;
                    var edOrgId   = System.Convert.ToInt32(agencyKey);
                    var org       = _orgBusiness.GetEducationOrganization(schoolYear, edOrgId);
                    if (org == null)
                    {
                        _log.Error($"{wamsUser.FullName} {_sessionInfo.CurrentAgencyId} org is null");
                        filterContext.Result = SevereError();
                        return;
                    }
                    _sessionInfo.SetCurrentAgency(agencyKey);

                    filterContext.Controller.ViewBag.DefaultAgency = org.NameOfInstitution;
                }
                else
                {
                    var area       = (string)filterContext.RouteData.DataTokens["area"];
                    var controller = (string)filterContext.RouteData.Values["controller"];
                    var action     = (string)filterContext.RouteData.Values["action"];
                    if (controller.Equals("Debug", StringComparison.InvariantCultureIgnoreCase) || controller.Equals("Error", StringComparison.InvariantCultureIgnoreCase) ||
                        (
                            controller.Equals("User", StringComparison.InvariantCultureIgnoreCase) &&
                            (action.Equals("Index", StringComparison.InvariantCultureIgnoreCase) || action.Equals("ChangeAgency", StringComparison.InvariantCultureIgnoreCase)))
                        )
                    {
                        return;
                    }

                    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                    {
                        { "area", "" },
                        { "controller", "User" },
                        { "action", "Index" }
                    });
                }
            }
            else
            {
                var org = _orgBusiness.GetEducationOrganization(schoolYear, _sessionInfo.CurrentAgencyId.GetValueOrDefault());
                if (org == null)
                {
                    var impersonateAgencyPrivilege = ConfigurationManager.AppSettings["DPI.ImpersonateAgencyPrivilege"];
                    var dpiAgencyKey = int.Parse(ConfigurationManager.AppSettings["DPI.AgencyKey"]);

                    if (agencies.Count() > 1 || wamsUser.HasPrivilege(dpiAgencyKey, impersonateAgencyPrivilege))
                    {
                        //agency not found, but more than one agency or can impersonate
                        var area       = (string)filterContext.RouteData.DataTokens["area"];
                        var controller = (string)filterContext.RouteData.Values["controller"];
                        var action     = (string)filterContext.RouteData.Values["action"];
                        if (controller.Equals("Debug", StringComparison.InvariantCultureIgnoreCase) || controller.Equals("Error", StringComparison.InvariantCultureIgnoreCase) ||
                            (
                                controller.Equals("User", StringComparison.InvariantCultureIgnoreCase) &&
                                (action.Equals("Index", StringComparison.InvariantCultureIgnoreCase) || action.Equals("ChangeAgency", StringComparison.InvariantCultureIgnoreCase)))
                            )
                        {
                            return;
                        }

                        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                        {
                            { "area", "" },
                            { "controller", "User" },
                            { "action", "Index" }
                        });
                    }
                    else
                    {
                        _log.Error($"{wamsUser.FullName} cannot access {_sessionInfo.CurrentAgencyId}");
                        filterContext.Result = SevereError();
                        return;
                    }
                }
                else
                {
                    filterContext.Controller.ViewBag.DefaultAgency = org.NameOfInstitution;
                }
            }


            if (_sessionInfo.CurrentAgencyId.GetValueOrDefault() > 0)
            {
                var impersonateAgencyPrivilege = ConfigurationManager.AppSettings["DPI.ImpersonateAgencyPrivilege"];
                var dpiAgencyKey = int.Parse(ConfigurationManager.AppSettings["DPI.AgencyKey"]);

                filterContext.Controller.ViewBag.Privileges     = wamsUser.GetPrivileges(_sessionInfo.CurrentAgencyId.GetValueOrDefault());
                filterContext.Controller.ViewBag.MultipleAgency = agencies.Count() > 1 || wamsUser.HasPrivilege(dpiAgencyKey, impersonateAgencyPrivilege);
            }
        }