Динамические данные ASP.NET: права доступа только к определенным строкам - PullRequest
1 голос
/ 30 июня 2011

Я хочу использовать динамические данные ASP.NET для моего следующего проекта, но есть проблема, которую не удается решить.В базе данных мы управляем авторизацией для каждой строки.Например, ни одному пользователю не разрешено видеть все строки таблицы Contracts.Таким образом, между контрактами и пользователями существует отношение «многие ко многим».Таким образом, каждый раз, когда Dynamic Data выполняет Select, чтобы показать все Контракты, он должен заглянуть в таблицу соединений ContractUsers, чтобы увидеть, какие контракты разрешено видеть текущему пользователю (отфильтровано по UserID, который будет сохранен в переменной сеанса).Конечно, эти соединительные таблицы должны быть невидимы для пользователей.По умолчанию Dynamic Data возвращает все строки таблицы, поэтому можно ли настроить это поведение для каждого запроса, который выполняет пользователь?Я хочу использовать Dynamic Data вместе с LINQ to SQL, но если бы эту задачу было гораздо проще выполнить с помощью Entity Framework, я бы тоже посмотрел на это.

Спасибо за вашу помощь и время.

Ответы [ 2 ]

1 голос
/ 04 июля 2011

Реализация такого решения в динамических данных, вероятно, потребует создания пользовательского шаблона сущности; не очень просто, но после этого не потребуется создавать собственные страницы, только редактировать шаблоны страниц.

Я думаю, что будет действительно полезно проверить отличную работу по ДД, выполненную С.Дж.Нотоном и представленную в его блоге .

Привет, Ф.

0 голосов
/ 30 июня 2011

Вы не должны использовать динамические данные, потому что вам нужен полный контроль над запросами и ручная запись всех запросов linq для повышения уровня безопасности ваших данных.Если вы все еще настаиваете на динамических данных, имейте в виду, что вы по-прежнему будете писать большинство страниц самостоятельно и будете использовать только динамические шаблоны.Вам придется вручную определять любой источник данных и правильно указывать, где условие для фильтрации результатов на основе зарегистрированного пользователя.

Кроме того, linq-to-sql не может скрыть соединительную таблицу, а структура сущностей может это сделатьтолько если таблица соединений содержит только два FK для отношения «многие ко многим».Если эта таблица содержит какой-либо другой столбец, который вы хотите использовать в приложении, вам придется отобразить его как любую другую сущность, а динамические данные будут отображать его как сущность.

Динамические данные - это технология для быстрого создания простого приложения, в котором вам необходимо предоставить доступ к базе данных через веб-интерфейс, но то, что вы описываете, не является простым сценарием.Для каждой записи требуется авторизация, которая может различаться для разных типов объектов.

...