Авторизация в ASP.NET Core на основе свойства Model

У меня есть приложение ASP.NET, которое управляет Records. Запись может иметь Creator (адрес электронной почты пользователя, назначенный Пользователю, который создает эту запись).

Правило таково, что Record редактируется только его Creator,

На самом деле я делаю это так в моей записи Details view (- только для чтения запись, доступная для всех пользователей):

<div>Record Name: @Model.Name</div>
@if (User.Identity.Name == Model.Creator) {
    <a asp-action="Edit" asp-route-id="@Model.Id">@("Edit".Localize(L))</a>
}

Это прекрасно работает... Я скрываю ссылку, если пользователь не авторизован, однако ссылка все еще доступна, если пользователь знает URL-адрес... скажем, доступ к myapp.net/Record/Edit/000545 может иметь неавторизованный пользователь доступ на объекте издания...

Как я могу ограничить на стороне контроллера это правило?

вот мой Record/Edit Пример кода контроллера:

public class RecordController : Controller
{
    private readonly ITableRepositories repository;
    // ...

    // GET: Record/Edit/5
    public async Task<IActionResult> Edit(string id)
    {
        if (string.IsNullOrEmpty(id)) return NotFound();

        var record = await repository.GetAsync<Record>(id);
        if (record == null) return NotFound();

        var viewModel = ViewModelFromRecord(record);
        return View(viewModel);
    }

Хотелось бы узнать, как запретить доступ к Edit страница для неавторизованных пользователей (и во второй строке необязательно * перенаправить их на Details только для чтения)...

0 ответов

Другие вопросы по тегам