У меня есть приложение, которому нужно попасть в ActiveDirectory, чтобы получить разрешения / роли пользователя при запуске приложения и сохранить его на всем протяжении.
Я не хочу нажимать AD на каждой форме, чтобы перепроверить разрешения пользователя, поэтому я бы хотел, чтобы роль пользователя и, возможно, другие данные вошедшего в систему пользователя были глобально доступны в любой форме в приложении, чтобы я мог правильно скрыть функциональность, кнопки и т. д. там, где это необходимо.
Что-то типа:
if (UserProperties.Role == Roles.Admin)
{
btnDelete.Visible = false;
}
Каковы лучшие практики хранения статических пользовательских данных в приложении Windows? Такие решения, как Singleton или глобальные переменные, могут работать, но я пытался избежать этого.
Является ли объект User, который передается конструктору каждой формы, столь же плохим?





Вы можете использовать поставщик профиля из asp.net в своем приложении Windows. Проверьте это @ http://fredrik.nsquared2.com/viewpost.aspx?PostID=244&showfeedback=true
Надеюсь, это поможет, Бруно Фигейредо http://www.brunofigueiredo.com
Возможно, мое мнение омрачено частым использованием javascript, но я думаю, что если у вас есть что-то, что является имел в виду, чтобы быть глобальным, тогда использование глобальных переменных нормально.
Глобальность - это плохо, когда вы выставляете на всеобщее обозрение то, чего не должно быть. Global - это нормально, если он семантически верен для предполагаемого использования данных.
Установите Thread.CurrentPrincipal с помощью WindowsPrincipal, GenericPrincipal или вашего настраиваемого принципала. Затем вы можете просто вызвать IsInRole:
if (Thread.CurrentPrincipal.IsInRole(Roles.Admin)) {
btnDelete.Visible = false;
}
Статические данные (или одноэлемент) подходят для этого, если вы хотите привязать данные к экземпляру приложения (или AppDomain).
Однако, учитывая, что вы говорите о фактическом кэшировании учетных данных пользователя, вы можете тщательно подумать о лазейках в безопасности. Например, что произойдет, если пользователь оставит приложение запущенным на несколько дней? Они могли выполнять операции под своими учетными данными прежней давности, а не под своими текущими учетными данными. В зависимости от того, что вы защищаете, вам может быть лучше проверять учетные данные по запросу или, по крайней мере, периодически истекать кешированные учетные данные.