Ролевая авторизация в .NET с PrincipalPermission и SecurityAction.Assert - PullRequest
2 голосов
/ 02 августа 2010

У меня есть класс с атрибутом

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
 public class MyProtectedClass { }

Это работает, как ожидается, и вызывающим абонентам отказано в доступе, когда текущий участник не аутентифицирован. В одном конкретном сценарии я хочу, чтобы эта логика была закорочена ... то есть вызывающей стороне не нужно проходить проверку подлинности. Одним из способов достижения этой цели, безусловно, было бы сбросить CurrentPrincipal потока с новым, свойство IsAuthenticated Identity которого имеет значение true ...

Тем не менее, я думаю, что я должен быть в состоянии сделать это с помощью вызывающего абонента Assert:

[PrincipalPermission(SecurityAction.Assert, Authenticated = true)]
 public class MyExemptedCallerClass { }

Однако это не дает желаемого эффекта, а метод в MyExemptedCallerClass все еще вызывает исключение, пытаясь создать экземпляр MyProtectedClass.

Есть идеи? Есть ли другой / лучший способ сделать это?

Спасибо.

1 Ответ

1 голос
/ 14 февраля 2011

Вот несколько соображений:

  1. Поместите атрибут PrincipalPermission в методы, которые вы хотите защитить, а не в класс.
  2. Если необходимо выполнить фрагмент кодакак аутентифицированными, так и не аутентифицированными пользователями, то, возможно, он не принадлежит MyProtectedClass.Возможно, он принадлежит MyUnprotectedClass, который может быть создан только в одном конкретном сценарии, который вы упомянули выше.Клиенты, прошедшие проверку подлинности, могут по-прежнему обращаться к коду в MyUnprotectedClass, вызывая методы фасада в MyProtectedClass.
...