private async Task <IdentityResult> EnsureRole( ICustomRoleManager roleManager, ICustomUserManager userManager, string uid, string role) { IdentityResult IR = null; if (roleManager == null) { throw new Exception("roleManager null"); } if (!await roleManager.RoleExistsAsync(role))//ensure that current role doesn't exists and create it { IR = await roleManager.CreateAsync(new CustomRole(role)); } var user = await userManager.FindByIdAsync(uid); if (user == null) { throw new Exception("User does not exists!"); } if (!await userManager.IsInRoleAsync(user, role)) { IR = await userManager.AddToRoleAsync(user, role); } return(IR); }
public async virtual Task <IActionResult> CreateAsync([FromBody] TRoleRequest request, Func <Task> logFunction = null) { if (!ModelState.IsValid) { throw new ArgumentException(ModelState.ModelStateToString(LocalizationService)); } var result = await CommonOperationAsync <TRole>(async() => { var role = Mapper.Map <TRole>(request); var response = await _roleManager.CreateAsync(role); if (!response.Succeeded) { foreach (var error in response.Errors) { ModelState.AddModelError(string.Empty, error.Description); } throw new ArgumentException(ModelState.ModelStateToString(LocalizationService)); } return(role); }); if (logFunction != null) { await logFunction.Invoke(); } return(Ok(new ApiResponse(LocalizationService, Logger).Ok(Mapper.Map <TRole, TRoleResponse>(result)))); }