Использование принципов / ролей Windows для программного управления доступом к элементам управления / формам - C #

2

Данное приложение довольно обширно с множеством разных типов ролей (читайте Customer Service, HR, Admins и т.д. и т.д.). Многоуровневый доступ, поэтому каждая роль наследует доступ под ним, поэтому HR имеет только чтение, у CS есть способности редактирования, полный контроль над админами. Строки меню и кнопки включения/видимых атрибутов управляются внешней внешней библиотекой, которая обрабатывает весь доступ на основе ролей посредством отражения. Человек, который написал это, был злым гением.

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

Я потратил много времени на проверку безопасности окон. Мы используем собственный пользователь/роли для этого приложения, а не Active Directory. Я хотел бы использовать User/Principal, так как это выглядит как лучший вариант. Если есть другой вариант, я открыт для консультаций, я бы хотел, чтобы это было сделано правильно, поскольку мы рассматриваем полную переписку (не связанную с этим).

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

Есть ли лучший способ, чем делать что-то по строкам:

btnA.Visible = Thread.CurrentPrincipal.IsInRole("HR");  
btnA.Enabled = Thread.CurrentPrincipal.IsInRole("CS") ||  
    Thread.CurrentPrincipal.IsInRole("ADMIN");

Есть ли лучший способ вообще? Какой лучший способ справиться с этим?

Теги:
security
winforms
roles

1 ответ

0
Лучший ответ

Это очень близко к тому, как мы это делаем, как в WinForms, так и в наших приложениях ASP.net. Единственное отличие состоит в том, что мы сохраняем имена ролей в базе данных, чтобы их легче поддерживать и обновлять, чем жестко закодированные константы.

Пока ему не хватает сексуальности какой-то автоматической привязки (которая кажется, что вы ищете), она прочная и с ней не было проблем. Однако наше приложение не имеет огромных различий между пользователями. По большей части, если пользователь может получить доступ к части приложения, они могут выполнять большинство действий.

  • 0
    Я понимаю, как хранить имена ролей в базе данных, но как бы вы использовали их, не используя жестко закодированные константы? Единственный способ, которым я представляю себе сейчас, - хранить константы в статическом классе ролей, это вы имели в виду?
  • 0
    Это точно верно. Извините, мне было неясно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню