public async Task <IActionResult> GetUserForTenant(long?id) { //データの入力チェック if (id == null) { return(JsonBadRequest("User ID is required.")); } //データの存在チェック var user = await userRepository.GetByIdAsync(id.Value); if (user == null) { return(JsonNotFound($"User ID {id} is not found.")); } var tenantId = CurrentUserInfo.SelectedTenant.Id; if (await userRepository.IsMemberAsync(user.Id, tenantId) == false) { //指定したユーザが同じテナントに所属していない場合、404扱い LogWarning($"User {user.Name} is NOT a member of Tenant {tenantId} yet."); return(JsonNotFound($"User ID {id} is not found.")); } var result = new IndexForTenantOutputModel(user); result.Roles = roleRepository.GetTenantRoles(user.Id, tenantId).Select(r => new RoleInfo(r)); //ロール情報・テナント情報と紐づけて、返す return(JsonOK(result)); }
public IActionResult GetAllUsersForTenant() { var tenantId = CurrentUserInfo.SelectedTenant.Id; //ユーザ情報単体を取得 //ToListを付けてSQLを即時発行させる。でないと次の処理でSQLが並行で発行されてしまい、EFの制約に引っかかる。 var users = userRepository.GetUsers(tenantId).OrderBy(u => u.Name).ToList(); //ロール情報紐づけて、返す return(JsonOK(users.Select(u => { var result = new IndexForTenantOutputModel(u); result.Roles = roleRepository.GetTenantRoles(u.Id, tenantId).OrderBy(r => r.SortOrder).Select(r => new RoleInfo(r)); return result; }))); }
public async Task <IActionResult> EditUserTenantRoleForTenant([FromRoute] long id, [FromBody] IEnumerable <long> roleIds, [FromServices] ITenantRepository tenantRepository) { //データの存在チェック var user = await userRepository.GetByIdAsync(id); if (user == null) { return(JsonNotFound($"User ID {id} is not found.")); } var tenant = CurrentUserInfo.SelectedTenant; if ((await userRepository.IsMemberAsync(user.Id, tenant.Id)) == false) { //まだ当該テナントに所属していなかったら失敗 LogWarning($"User {user.Name} is NOT a member of Tenant {tenant.Id} yet."); return(JsonNotFound($"User ID {id} is not found.")); } var roles = new List <Role>(); //ロールについての存在&入力チェック if (roleIds != null) { foreach (long roleId in roleIds) { var role = await GetRolesAsync(tenant.Id, roleId); if (role == null) { return(JsonNotFound($"Role ID {roleId} is not found.")); } roles.Add(role); } } userRepository.ChangeTenantRole(id, tenant.Id, roles); unitOfWork.Commit(); var result = new IndexForTenantOutputModel(user); result.Roles = roleRepository.GetTenantRoles(user.Id, tenant.Id).Select(r => new RoleInfo(r)); //ロール情報・テナント情報と紐づけて、返す return(JsonOK(result)); }