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;
        }