Если у вас одноуровневое приложение (например, веб-слой и слой службы / данных работают в одном и том же процессе), то для достижения того, что вы хотите, обычно используют пользовательский принципал.
Вы можете использовать пользовательский принципал для хранения дополнительных данных о пользователе (следите за этим: http://www.asp.net/security/videos/use-custom-principal-objects),, но хитрость заключается в том, чтобы установить этот пользовательский субъект в субъект текущего потока, выполнив Thread.CurrentPrincipal = myPrincipal
Это фактически означает, что вы можете получить доступ к своей информации о пользователе / роли изнутри вашего уровня обслуживания без создания дополнительных параметров в ваших методах (что является плохим дизайном). Вы можете сделать это, запросив Thread.CurrentPrincipal
и приведя его к собственной реализации.
Если ваш уровень службы / данных существует в другом процессе (возможно, вы используете веб-службы), тогда вы все равно можете передавать информацию о пользователе отдельно от вызовов методов, передавая пользовательские заголовки данных вместе с запросом на обслуживание и оставляя это данные из ваших вызовов методов.
Редактировать: чтобы вернуться к вашим запросам данных, очевидно, что любые запросы, которые вы пишете, на которые влияют некоторые аспекты текущего пользователя, вошедшего в систему, или их роль, могут быть обнаружены при просмотре данных в вашем пользовательском субъекте, но без передачи специальных данных через вызовы методов.
Надеюсь, это, по крайней мере, укажет вам правильное направление.