Exemple #1
0
        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));
        }
Exemple #2
0
        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;
            })));
        }
Exemple #3
0
        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));
        }