Хранение статических пользовательских данных в приложении C # windows - PullRequest
3 голосов
/ 07 ноября 2008

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

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

Что-то вроде:

if (UserProperties.Role == Roles.Admin)
{
    btnDelete.Visible = false;
}

Каковы оптимальные методы хранения статических пользовательских данных в приложении Windows? Такие решения, как Singleton или глобальные переменные, могут работать, но я пытался их избежать.

Является ли объект User, который передается в конструктор каждой формы, таким же плохим?

Ответы [ 4 ]

4 голосов
/ 07 ноября 2008

Установить Thread.CurrentPrincipal либо с WindowsPrincipal , либо GenericPrincipal , либо с вашим пользовательским принципалом. Затем вы можете просто позвонить IsInRole :

if (Thread.CurrentPrincipal.IsInRole(Roles.Admin)) {
   btnDelete.Visible = false;
}
2 голосов
/ 07 ноября 2008

Возможно, мое суждение омрачено моим частым использованием javascript, но я думаю, что если у вас есть что-то, что означало бы быть глобальным, то использование глобальных переменных - это нормально.

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

0 голосов
/ 07 ноября 2008

Статические данные (или одноэлементные данные) подходят для этого, если вы хотите охватить данные экземпляром приложения (или AppDomain).

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

0 голосов
/ 07 ноября 2008

Вы можете использовать поставщика профилей из asp.net в вашем приложении для Windows. Проверьте это * http://fredrik.nsquared2.com/viewpost.aspx?PostID=244&showfeedback=true

Надеюсь, это поможет, Бруно Фигейредо http://www.brunofigueiredo.com

...