public static List <AspnetUserSubjectCategoryClaim> GenerateData(List <AspNetUserClaim> claims)
        {
            var viewList = new List <AspnetUserSubjectCategoryClaim>();

            foreach (var claim in claims)
            {
                var loadedClaim = SubjectCatagoryClaimValue.Load(claim.ClaimValue);
                foreach (var loadedClaimRegion in loadedClaim.Regions)
                {
                    viewList.Add(new AspnetUserSubjectCategoryClaim
                    {
                        BACode       = loadedClaim.BACode,
                        DocumentType = loadedClaim.DocType,
                        OrgCode      = loadedClaim.OrgCode,
                        Region       = loadedClaimRegion,
                        UserId       = claim.UserId
                    });
                }
            }
            return(viewList);
        }
        public async Task <ActionResult> Save(
            [Bind(Include =
                      nameof(UserModel.UserId) + "," +
                      nameof(UserModel.UserName) + "," +
                      nameof(UserModel.Email) + "," +
                      nameof(UserModel.UserType) + "," +
                      nameof(UserModel.Claims) + "," +
                      nameof(UserModel.Permissions) + "," +
                      nameof(UserModel.GroupMembershipRegionIds) + "," +
                      nameof(UserModel.Groups) + "," +
                      nameof(UserModel.SubjectCategoryClaims) + "," +
                      nameof(UserModel.SubjectCategoryClaims) + "." + nameof(SubjectCatagoryClaimValue.BACode) + "," +
                      nameof(UserModel.SubjectCategoryClaims) + "." + nameof(SubjectCatagoryClaimValue.DocType) + "," +
                      nameof(UserModel.SubjectCategoryClaims) + "." + nameof(SubjectCatagoryClaimValue.OrgCode) + "," +
                      nameof(UserModel.SubjectCategoryClaims) + "." + nameof(SubjectCatagoryClaimValue.Regions)
                  )]
            UserModel m)
        {
            AspNetUser u = null;

            m.UserId   = StringHelpers.TrimOrNull(m.UserId);
            m.UserName = StringHelpers.TrimOrNull(m.UserName);
            m.Email    = StringHelpers.TrimOrNull(m.Email);
            var users = await DB.AspNetUsers.Where(z => z.UserName == m.UserName || z.Email == m.Email || z.Id == m.UserId).ToListAsync();

            bool hasErrors     = false;
            bool userNameError = false;
            bool emailError    = false;

            foreach (var user in users)
            {
                if (user.Id == m.UserId)
                {
                    u = user;
                    continue;
                }
                if (0 == string.Compare(m.UserName, user.UserName, true) && !userNameError && m.UserName != null)
                {
                    ModelState.AddModelError(nameof(m.UserName), $"Username {m.UserName} already exists, cannot re-add");
                    hasErrors     = true;
                    userNameError = true;
                }
                if (0 == string.Compare(m.Email, user.Email, true) && !emailError && m.Email != null)
                {
                    ModelState.AddModelError(nameof(m.Email), $"Email {m.Email} already exists, cannot re-add");
                    hasErrors  = true;
                    emailError = true;
                }
            }
            if (ModelState.IsValid && !hasErrors)
            {
                if (u == null && m.UserId == null)
                {
                    var res = await UserManager.CreateAsync(new ApplicationUser { UserName = m.UserName, Email = StringHelpers.TrimOrNull(m.Email) });

                    u = await DB.AspNetUsers.FirstOrDefaultAsync(z => z.UserName == m.UserName);

                    Log.Information("Created new user UserId={UserId} => UserName={UserName}, Email={Email}", u.Id, u.UserName, u.Email);
                }
                else if (u == null)
                {
                    return(HttpNotFound());
                }
                else
                {
                    Log.Information("Modified existing with UserId={UserId} => OldUserName={OldUserName}, OldEmail={OldEmail}, NewUserName={NewUserName}, NewEmail={NewEmail}", u.Id, u.UserName, u.Email, m.UserName, m.Email);
                    u.Email    = m.Email;
                    u.UserName = m.UserName;
                }

                var myGroups = await DB.AspNetUsers.Where(PortalHelpers.GrouplikeUserPredicate).Where(g => m.Groups.Contains(g.UserName)).ToListAsync();

                foreach (var uu in u.ChildUserUsers.ToList())
                {
                    DB.UserUsers.Remove(uu);
                }
                m.GroupMembershipRegionIds.ForEach(rid => myGroups.ForEach(g => DB.UserUsers.Add(new UserUser {
                    ParentUser = g, ChildUser = u, RegionId = rid
                })));
                foreach (var c in u.AspNetUserClaims.Where(z => z.ClaimType == ApplicationPermissionClaimValue.ClaimType || z.ClaimType == SubjectCatagoryClaimValue.ClaimType).ToList())
                {
                    DB.AspNetUserClaims.Remove(c);
                }
                var allRegions = Cacher.FindOrCreateValWithSimpleKey("allRegionsHashSet", () => DB.Regions.Select(z => z.RegionId).ToSet());
                foreach (var p in m.Permissions)
                {
                    DB.AspNetUserClaims.Add(new AspNetUserClaim
                    {
                        ClaimType  = ApplicationPermissionClaimValue.ClaimType,
                        UserId     = u.Id,
                        AspNetUser = u,
                        ClaimValue = new ApplicationPermissionClaimValue
                        {
                            ApplicationPermissionName = Parse.ParseEnum <ApplicationPermissionNames>(p),
                            Regions = allRegions
                        }.ToXml()
                    });
                }
                var sccDocTypes = HttpContext.Request.Form.GetValues("scc.docType") ?? Empty.StringArray;
                var sccBaCodes  = HttpContext.Request.Form.GetValues("scc.bacode") ?? Empty.StringArray;
                var sccOrgCodes = HttpContext.Request.Form.GetValues("scc.orgcode") ?? Empty.StringArray;
                var sccRegions  = HttpContext.Request.Form.GetValues("scc.region") ?? Empty.StringArray;
                m.Claims.Clear();
                m.SubjectCategoryClaims = new List <AspnetUserSubjectCategoryClaim>();
                for (int z = 0; z < sccDocTypes.Length; ++z)
                {
                    var sccv = new SubjectCatagoryClaimValue
                    {
                        BACode  = sccBaCodes[z],
                        DocType = sccDocTypes[z],
                        OrgCode = sccOrgCodes[z]
                    };
                    if (null == StringHelpers.TrimOrNull(sccv.DocType))
                    {
                        continue;
                    }
                    int regionId = Parse.ParseInt32(sccRegions[z]);
                    sccv.Regions = sccv.Regions ?? new HashSet <int>();
                    sccv.Regions.Add(regionId);
                    DB.AspNetUserClaims.Add(new AspNetUserClaim
                    {
                        ClaimType  = SubjectCatagoryClaimValue.ClaimType,
                        UserId     = u.Id,
                        AspNetUser = u,
                        ClaimValue = sccv.ToXml()
                    });
                    var scc = new AspnetUserSubjectCategoryClaim
                    {
                        BACode       = sccv.BACode,
                        DocumentType = sccv.DocType,
                        OrgCode      = sccv.OrgCode,
                    };
                    m.SubjectCategoryClaims.Add(scc);
                    m.Claims.Add(scc.ToFriendlyString());
                }
                await DB.SaveChangesAsync();

                return(RedirectToIndex());
            }
            await PopulateDetailsViewBag();

            if (m.UserId == null)
            {
                return(View("Create", m));
            }
            else
            {
                return(View("Details", m));
            }
        }
Ejemplo n.º 3
0
        public static List <AspNetUserClaim> GenerateData(int listSize, string withUserId)
        {
            var applicationPermission = new ApplicationPermissionClaimValue
            {
                Regions = new HashSet <int>()
                {
                    1, 4
                },
                ApplicationPermissionName = ApplicationPermissionNames.ApplicationUser
            };

            var canViewOtherWorkflowsClaimValue = new ApplicationPermissionClaimValue
            {
                Regions = new HashSet <int>()
                {
                    1, 4
                },
                ApplicationPermissionName = ApplicationPermissionNames.CanViewOtherWorkflows
            };

            var canViewReviewsClaimValue = new ApplicationPermissionClaimValue
            {
                Regions = new HashSet <int>()
                {
                    1, 4
                },
                ApplicationPermissionName = ApplicationPermissionNames.CanViewReviews
            };

            var canManageUsersClaimValue = new ApplicationPermissionClaimValue
            {
                Regions = new HashSet <int>()
                {
                    1, 4
                },
                ApplicationPermissionName = ApplicationPermissionNames.ManageUsers
            };

            var canCreateReviews = new ApplicationPermissionClaimValue
            {
                Regions = new HashSet <int>()
                {
                    1, 4
                },
                ApplicationPermissionName = ApplicationPermissionNames.CanCreateReviews
            };
            var scClaimValue = new SubjectCatagoryClaimValue
            {
                Regions = new HashSet <int>()
                {
                    1, 4
                },
                DocType = "UE",
                BACode  = "F40000",
                OrgCode = "G1234"
            };

            var claimType = ApplicationPermissionClaimValue.ClaimType;


            var seralizedCanViewOtherWorkflowsClaimValue = canViewOtherWorkflowsClaimValue.ToXml();
            var serializedCanViewReviewsClaimValue       = canViewReviewsClaimValue.ToXml();
            var serializedCanManageUsersClaimValue       = canManageUsersClaimValue.ToXml();
            var serializedScClaimValue          = scClaimValue.ToXml();
            var serializedApplicationPermission = applicationPermission.ToXml();
            var serializedCreateReviews         = canCreateReviews.ToXml();
            var claims = Builder <AspNetUserClaim>
                         .CreateListOfSize(listSize)
                         .TheFirst(4)
                         .With(u => u.UserId = withUserId)
                         .Build()
                         .ToList();

            claims[0].ClaimValue = serializedCanViewReviewsClaimValue;
            claims[0].ClaimType  = ApplicationPermissionClaimValue.ClaimType;
            claims[1].ClaimValue = serializedCanManageUsersClaimValue;
            claims[1].ClaimType  = ApplicationPermissionClaimValue.ClaimType;
            claims[2].ClaimValue = serializedScClaimValue;
            claims[2].ClaimType  = SubjectCatagoryClaimValue.ClaimType;
            claims[3].ClaimValue = seralizedCanViewOtherWorkflowsClaimValue;
            claims[3].ClaimType  = ApplicationPermissionClaimValue.ClaimType;
            return(claims);
        }