Пользовательские роли Entity Framework и SQL Server: как включить EF для создания запросов с учетом ролей? - PullRequest
0 голосов
/ 23 января 2012

Фон

У нас есть приложение WinForms с программным кодом Entity Framework 4.2 / FluentAPI с использованием SQL Server 2008 R2.

Безопасность - это пользовательская реализация IPrincipal и IIdentity с ролями для пользователя. Эти роли проверяются, когда отображается форма / меню / кнопка, и она будет отключена / удалена в зависимости от роли пользователя.

Пользователи проходят проверку подлинности в базе данных, поэтому для подключения нет «главного» пользователя: оно создается с использованием имени пользователя / пароля, указанных на экране входа в систему.

Итак, доступ к данным (общий) работает.

Проблема

Но в некоторых случаях мне может потребоваться отключить доступ к определенной таблице или столбцу внутри таблицы.

Некоторые тесты показали здесь, что IGenericRepository.Find<MyCustomType>(_idToFind) (который возвращает полную сущность) завершится ошибкой, потому что нет доступа к одному столбцу, и SQL-сервер предотвратит весь оператор выбора.

Я обнаружил, однако, что создать запрос, как

IGenericRepository.All<MyCustomType>().Select(_c => _c.JustASingleField) 

будет работать, потому что сгенерированный запрос будет искать только определенное поле, к которому у меня есть доступ.

Вопрос

Есть ли способ для меня создавать запросы, которые будут с учетом ролей к базе данных?

Например: Find<MyCustomType>(id) вернет объект как обычно, но с полем, к которому у пользователя нет доступа, равным NULL или без значения?

Или мне просто нужно написать «общие» запросы для каждого отдельного элемента, который не требует защиты, и использовать систему безопасности для полного блокирования доступа к ресурсу?

Другим примером может быть заполнение сетки, но столбец, к которому у пользователя нет доступа, будет пустым.

Возможно ли вообще использовать Entity Framework?

1 Ответ

0 голосов
/ 23 января 2012

Возможно ли вообще использовать EntityFramework?

Нет.EF не знает о конфигурации безопасности на сервере SQL и не может реагировать на любые требования безопасности, ожидаемые сервером SQL, за исключением предоставления учетных данных для строки подключения.

Если вам требуется такой тип безопасности, вам следует использовать представления базы данных.предоставляя только доступные элементы для определенной роли и позволяя EF использовать отображение моделей только для тех представлений, к которым у роли пользователя есть доступ - это может привести к довольно большому набору различных «моделей» из-за множества ролей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...