public async Task CopyRole(string source, string target) { var sourceIsSytemRole = SystemRoleViewModels.Any(x => x.Name == source); UbikRole copy; if (sourceIsSytemRole) { var sourceViewModel = RoleModels().First(x => x.Name == source); copy = new UbikRole() { Name = target }; foreach (var roleClaimRowViewModel in sourceViewModel.Claims) { copy.Claims.Add(new UbikRoleClaim(roleClaimRowViewModel.Type, roleClaimRowViewModel.Value)); } } else { var original = await _roleManager.FindByNameAsync(source); if (original == null) throw new ApplicationException("source role not found"); copy = new UbikRole(target); foreach (var applicationClaim in original.Claims) { copy.Claims.Add(applicationClaim); } } var result = await _roleManager.CreateAsync(copy); if (!result.Succeeded) throw new ApplicationException(string.Join("\n", result.Errors)); _cache.RemoveItem(Constants.RoleViewModelsCacheKey); }
public RoleViewModel RoleModel(string id) { UbikRole roleEntity; if (string.IsNullOrWhiteSpace(id)) //creates a new blank transient entity { roleEntity = new UbikRole(); } else { using (_dbContextScopeFactory.CreateReadOnly()) { Expression<Func<UbikRole, bool>> predicate = role => role.Id == Convert.ToInt32(id); roleEntity = _roleRepo.GetAsync(predicate, x => x.Claims).Result; } } var model = _roleBuilder.CreateFrom(roleEntity); _roleBuilder.Rebuild(model); return model; }