Данное приложение довольно обширно с множеством разных типов ролей (читайте 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");
Есть ли лучший способ вообще? Какой лучший способ справиться с этим?
Это очень близко к тому, как мы это делаем, как в WinForms, так и в наших приложениях ASP.net. Единственное отличие состоит в том, что мы сохраняем имена ролей в базе данных, чтобы их легче поддерживать и обновлять, чем жестко закодированные константы.
Пока ему не хватает сексуальности какой-то автоматической привязки (которая кажется, что вы ищете), она прочная и с ней не было проблем. Однако наше приложение не имеет огромных различий между пользователями. По большей части, если пользователь может получить доступ к части приложения, они могут выполнять большинство действий.