Перейти к содержанию

Скрытие элементов в шаблонах 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 г.

Комментарии

Комментарии