Как я могу выполнить рефакторинг и СУХОЙ код «пользовательской проверки» в моих контроллерах? - PullRequest
0 голосов
/ 06 июня 2019

Все еще изучаю веревки, поэтому я едва знакомлюсь с основами .Net и C #.

Во многих (но не во всех) моих контроллерах у меня есть один и тот же бит кода, используемый для определения, является ли пользователь действительным и может ли он получить доступ к странице.

public IActionResult MyPage(string id = null)
{
    if (_currentUser == null) {
        return RedirectToAction("Error", "Home");
    }

    // Either the parameter value or a session variable.
    id = id ?? _currentUser.UserEmployeeNumber; 

    Employee employee = _employeeRepository.GetEmployeeById(id);

    if (employee == null) {
       return RedirectToAction("Error", "Team");
    }

    if (!_userChecks.IsAllowedAccess(_currentUser.UserEmployeeNumber, id)){
        return RedirectToAction("AccessDenied", "Home");
    }

    // Begin actual page functionality

    return View(myPageViewModel);
}

Как я могу извлечь это и сделать его многоразовым? Возможно, с конечной целью, похожей на:

public IActionResult MyPage(string id = null)
{
    DoUserStuff(id);

    // Page related functionality 

    return View(myPageViewModel);
}

Я борюсь с понятием, что этому вспомогательному методу может потребоваться вернуть перенаправление или id и employee, поскольку эти переменные будут использоваться в фактической структуре контроллера.

Заранее спасибо за ваши предложения и советы.

1 Ответ

2 голосов
/ 06 июня 2019

То, что вы пытаетесь сделать здесь, это авторизация . Инстинкт попытаться реорганизовать ваш код хорош, но в этом случае вы должны обратить внимание на средства, предлагаемые фреймворком для решения этой проблемы, и выяснить, как ими воспользоваться. Результатом будет не просто DRYer, он будет включать гораздо меньше кода для начала и будет более идиоматичным и знакомым для других разработчиков ASP.NET Core.

Документы в этой области довольно хороши - я бы предложил их в следующем порядке:

Это много, если вы новичок, но инвестиции того стоят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...