У меня есть сайт со страницей, содержащей несколько вкладок, и при выборе одной из них ее содержимое извлекается с сервера с помощью вызова AJAX. Каждая вкладка загружается через другой контроллер. Например, у меня есть страница клиента, которая содержит вкладки «Продукты» и «Клиенты».
На сайте есть разные типы пользователей с разными уровнями разрешений.
Что я хочу сделать, это защитить контроллеры и показывать содержимое вкладок, только если авторизованный пользователь имеет разрешение. Поэтому, если пользователь без разрешения вводит URL контроллера, он должен перенаправить на страницу входа. URL-адрес выглядит так:
http://localhost/MyApp/Products/1
где 1 - идентификатор базы данных продукта.
Я могу реализовать эти 2 решения, но ни одно из них не является оптимальным:
Используйте атрибут ChildOnlyAction. Я бы пометил действия контроллера Product этим атрибутом и отобразил бы вкладки из основного представления, используя RenderAction. Но это будет означать, что все вкладки на странице должны будут отображаться, что не является оптимальным, поскольку я хочу загружать данные только тогда, когда пользователь нажимает на вкладку.
При каждом запросе к контроллеру продукта я выполняю запрос к базе данных, используя идентификатор записи, чтобы проверить, есть ли у пользователя разрешение на доступ к нему. Но это означает, что для каждого запроса мне нужно будет выполнить дополнительный запрос.
Мне интересно, есть ли лучший подход к этому.