Как мне контролировать доступ к точкам данных в моем API? - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть простой контроллер API:

        [HttpGet("{conferenceId}/details")]
    [ProducesResponseType(typeof(ConferenceDetailsDto), StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status404NotFound)]
    public async Task<IActionResult> GetConferences(int ConferenceId)
    {
        var conference = await _dbContext.Conferences
            .Where(c => c.Id == ConferenceId)
            .FirstOrDefaultAsync();

        var speakers = await _dbContext.Speakers.Where(s => s.Id == conference.speakerId).FirstOrDefaultAsync();

        var talk = await _dbContext.Talks.Where(t => t.Id == speaker.talkId).FirstOrDefaultAsync();


        var conferenceDetails = new ConferenceDetailsDto
        {
            SpeakerDetails = new SpeakerDetailsDto
            {
                SpeakerEmail = speaker?.Email,
                SpeakerName = speaker?.Name,
                SpeakerPhone = speaker?.Phone,
                SpeakerAddress = speaker?.Address
            },
            conferenceName = conference?.Name,
            conferenceDate = conference?.Date,
            conferenceRoom = conference?.Room,
            conferenceHost = conference?.Host,

            BillDetails = new BillingDetailsDto
            {
                BillTo = conference?.Host,
                BillingAddress = conference?.BillingAddress,
                CreditCard = conference?.CreditCardNumber                   
            },

            Talk = new TalkDto
            {
                TalkName = talk?.Subject,
                TalkSpeaker = speaker?.Name,
                TalkTitle = talk?.Title             
            }
        };

        if (conferenceDetails == null)
            return NotFound();

        return Ok(conferenceDetails);
    }

Теперь я хотел бы контролировать доступ к определенным точкам данных моего API. Например, я не хочу предоставлять платежные данные некоторым клиентам, которые используют мой API. Для некоторых клиентов я хотел бы предоставить только основную информацию о конференции. Я знаю, что могу использовать строку запроса, но это сделало бы мое решение беспорядочным.

Как лучше всего спроектировать этот API, чтобы у меня был контроль над данными, которые я хочу предоставить? Любая помощь или понимание будет принята с благодарностью. Заранее спасибо.

...