У меня есть Windows-аутентифицированное MVC-приложение с уровнем репозитория. Все взаимодействие контроллера с базой данных осуществляется через репозиторий. Каждый контроллер имеет ссылку на репозиторий:Шаблон для выполнения авторизации в слое репозитория приложения MVC
public class PostController : Controller
{
private Repository db = new Repository();
[HttpPost]
public ActionResult DeletePost(int id)
{
// Authorize that the user is allowed to delete this post...
db.DeletePost(id);
}
}
Мой вопрос заключается в том, есть ли хороший способ, чтобы переместить мою логику авторизации в слой хранилище. Я хотел бы, чтобы функция Repository.DeletePost()
отказала в удалении сообщений, которые не были созданы аутентифицированным пользователем. Проблема в том, что мой репозиторий не знает, кем является аутентифицированный пользователь. Контроллер знает (через Controller.User
).
Передача Controller.User
в конструктор Repository
не работает, потому что Controller.User
, по-видимому, не определен в момент вызова конструктора.
Как я могу сообщить Repository
, кто является аутентифицированным пользователем? Было бы лучше всего построить Repository
в каждом действии? Или это плохая идея справиться с этим на уровне репозитория?
Это то, что я действительно делаю, но я чувствую, что не хватает «развязки», поскольку теперь наш репозиторий привязан к нашему пользователю, который может быть каким-то администратором, который не смог бы ничего сделать, если бы не был учтен для этого на каждом шагу – Worthy7