Скрытие элементов в шаблонах Razor от незарегистрированных пользователей¶
Внимание
Пользовательский интерфейс легко обойти, поэтому важно всегда авторизовать методы действия и страницы Razor на сервере, а не только на стороне клиента.
Для пользовательского опыта было бы лучше, чтоб элементы интерфейса — кнопки или ссылки — выполняющие запрещенные для конкретного пользователя действия, были бы скрыты от этого пользователя.
В качестве примера рассмотрим страницу просмотра рецепта для нашего приложения. Добавим возможность скрыть кнопку редактирования.
public class ViewModel : PageModel
{
public Recipe Recipe { get; set; }
public bool CanEditRecipe { get; set; }
private readonly RecipeService _service;
private readonly IAuthorizationService _authService;
public ViewModel(RecipeService service,
IAuthorizationService authService)
{
_service = service;
_authService = authService;
}
public async Task<IActionResult> OnGetAsync(int id)
{
Recipe = _service.GetRecipe(id);
var isAuthorised = await _authService.AuthorizeAsync(User, Recipe, "CanManageRecipe");
CanEditRecipe = isAuthorised.Succeeded;
return Page();
}
}
Здесь мы передаём в свойство
CanEditRecipe результат валидации.Затем, добавим условие в шаблон страницы:
@if(Model.CanEditRecipe)
{
<a asp-page="Edit" asp-route-id="@Model.Id" class="btn btn-primary">Edit</a>
}
Внимание
Несмотря на то, что кнопка Edit теперь скрыта от пользователя, злоумышленник всё равно может перейти на страницу Edit.cshtml, поэтому очень важно сохранить проверку авторизации на этой странице.
Последнее обновление :
5 мая 2023 г.
Дата создания : 8 октября 2022 г.
Дата создания : 8 октября 2022 г.