Exemplo n.º 1
0
        public static ApplicationRole Create(string name, PermissionNames[] permissions = null, int?tenantId = null)
        {
            var r = new ApplicationRole
            {
                Name             = name,
                NormalizedName   = name.ToLower(),
                ConcurrencyStamp = Guid.NewGuid().ToString()
            };

            if (permissions != null)
            {
                foreach (var permission in permissions.Distinct())
                {
                    r.Claims.Add(PermissionHelpers.CreateIdentityRoleClaim(permission));
                }
            }
            if (tenantId != null)
            {
                r.TenantId = tenantId.Value;
            }
            return(r);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Edit(string id, [Bind(nameof(RoleDetailViewModel.Id), nameof(RoleDetailViewModel.SelectedPermissions), nameof(RoleDetailViewModel.RoleName), nameof(RoleDetailViewModel.InitialPermissionList))] RoleDetailViewModel m)
        {
            if (id == null)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                var applicationRole = await Rdb.Roles.Include(lo => lo.Claims).SingleOrDefaultAsync(lo => lo.Id == id && lo.TenantId == TenantId);

                if (applicationRole == null)
                {
                    return(NotFound());
                }
                try
                {
                    applicationRole.Name             = m.RoleName;
                    applicationRole.NormalizedName   = m.RoleName.ToLower();
                    applicationRole.ConcurrencyStamp = Guid.NewGuid().ToString();

                    var selectedRoleClaims = new List <RoleClaim>();

                    foreach (var p in m.SelectedPermissions.ConvertAll(s => Parse.ParseEnum <PermissionNames>(s)))
                    {
                        selectedRoleClaims.Add(PermissionHelpers.CreateIdentityRoleClaim(p));
                    }

                    foreach (var p in selectedRoleClaims)
                    {
                        if (applicationRole.Claims.All(x => x.ClaimType != p.ClaimType))
                        {
                            applicationRole.Claims.Add(p);
                        }
                    }

                    var rolesClaimsToRemove =
                        applicationRole.Claims.Where(x => !selectedRoleClaims.Any(p2 => p2.ClaimType == x.ClaimType) &&
                                                     !ApiClaimTypes.Any(p3 => p3 == x.ClaimType)).ToList();

                    applicationRole.Claims.Remove(rolesClaimsToRemove);

                    Rdb.Update(applicationRole);
                    await Rdb.SaveChangesAsync();

                    SetToast(AspHelpers.ToastMessages.Saved);
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ApplicationRoleExists(applicationRole.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToIndex());
            }
            return(View(m));
        }