securitymanager.policyhierarchy () устарел, чем его заменить? - PullRequest
0 голосов
/ 28 января 2019

SecurityManager.PolicyHierarchy () выдает предупреждение о том, что он устарел, но я не могу найти, каким методом он заменяется или как его заменить, когда он используется для сравнения полученных и представленных уровней политики.

Например1003 *

SecEnumerator levelEnumerator = SecurityManager.PolicyHierarchy();
while (levelEnumerator.MoveNext())
{
 PolicyLevel Seclevel = levelEnumerator.Current as PolicyLevel;
 if (Seclevel == Init.Seclevel)
 {
      return;
 }
}

Для такого применения какой другой метод должен использоваться сейчас?

1 Ответ

0 голосов
/ 01 февраля 2019

Замена не предусмотрена.

Как видно на странице документации SecurityManager в MSDN, все методы, относящиеся к политикам, устарели.Причиной этого является тот факт, что политики теперь удаляются из CAS (ну, начиная с .Net4).Чтобы узнать больше об этой проверке здесь:

Сводка изменений в Code Access Security

При этом в описании этого предупреждения есть хорошая ссылка, которая предоставляетВы обладаете необходимой информацией, необходимой для изменения кода, и предложите возможные альтернативы:

Совместимость и миграция политики безопасности доступа к коду

Миграция: замена устаревших вызовов

Чтобы помочь вам лучше, нам нужно знать, чего именно вы здесь добиваетесь.Опишите вашу цель, и мы могли бы предложить альтернативу или замену.


На основании вашего комментария кажется, что вы пытаетесь сделать изолированную часть кода, вставленного пользователем (как выпоставить его) и ограничить его доступ.Это не то, для чего нужно использовать CAS.На самом деле, есть четкое предупреждение об этом типе использования в здесь :

Защита доступа к коду в .NET Framework не должна использоваться в качестве механизма для обеспечения безопасности на основе границо происхождении кода или других аспектах идентификации.

Ваш код, вероятно, должен быть реорганизован таким образом, чтобы получить разрешения, требуемые для фрагмента кода, с использованием предоставленного Evidence (являющегося строгим именем или URL-адресом и т. д.) с помощью метода SecurityManager.GetStandardSandbox(Evidence), а затем с помощью возвращенных разрешений загрузите сборку в новый изолированный домен приложения с помощью метода CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]).Вы также можете изменить эти разрешения перед созданием нового домена, чтобы иметь больше контроля над выполнением кода.Следующая статья может помочь вам реорганизовать ваше приложение:

Как: выполнить частично доверенный код в песочнице

Другими словами, больше нет политик, но вы можетеопределить, получить и выполнить ваш код в соответствии с определенным PermissionSet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...