Приложение, над которым я работаю, является многопользовательским и многопрофильным, и в настоящий момент у меня возникают проблемы, когда я пытаюсь найти наиболее эффективный / лучший способ обеспечения безопасности на уровне данных, в широком смысле не позволяющий UserA видеть данные UserB.,Если существуют различные контроллеры (Продукты, Заказы и т. Д.) И модели, то маршруты представляют собой что-то вроде Product / Edit / 1 и Order / Edit / 1.Тем не менее, чтобы гарантировать, что пользователи не смогут изменять маршруты для просмотра данных друг друга, кажется, что каждый вызов уровня обслуживания / уровня базы данных потребует от меня проверки того, что конкретный ключ продукта / ключ заказа принадлежит аутентифицированному пользователю?Это лучший вариант или мне не хватает чего-то более элегантного.
Редактировать обновление
Из ответа Омри, приведенного ниже, первая ссылка на самом деле содержит ссылку на здесь.В нем упоминаются различные способы обеспечения безопасности на уровне доступа, но я думаю, что именно об этом я хочу узнать мнение людей.Должен ли я сделать что-то вроде этого:
public class ProductController
{
public ActionResult Edit(int id)
{
if (_productService.CanUserEdit(id, userID))
{
_productService.Save(id);
}
else
{
throw UnauthorizedException;
}
return RedirectToAction("Index");
}
}
ИЛИ
public class ProductController
{
public ActionResult Edit(int id)
{
_productService.Save(id, userID);
return RedirectToAction("Index");
}
}
public class ProductService
{
public void Save(int id, int userID)
{
if (CanUserEdit(id, userID))
{
//DO SAVE
}
}
private CanUserEdit(int id, int userID)
{
}
}
Очевидно, что между этими двумя реализациями нет большой разницы, только в том, происходит ли действие в контроллере или вуровень обслуживания.Уровень сервиса меняется на лету в зависимости от компании, поэтому я предполагаю, что нам, вероятно, следует сделать первый вариант, и чтобы обслуживание продукта для каждой компании происходило из общего базового класса, который реализует возможность CanUserEdit, поскольку она не меняется.