Авторизация в ASP.NET Core на основе свойства Model
У меня есть приложение ASP.NET, которое управляет Record
s. Запись может иметь 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
только для чтения)...