2009-07-28 4 views
1

Я создал модуль аутентификации в ASP.Net, но я не хочу, чтобы логика в модуле аутентификации выполнялась, если ресурс настроен для анонимного доступа, поскольку логика стоит дорого.Модуль аутентификации Asp.Net

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

В настоящее время я делаю следующее, что «чувствует» право. Любая помощь будет оценена по достоинству.

public static bool AllowEveryone() 
     { 
      bool rslt = false; 

      AuthorizationSection config = (AuthorizationSection)WebConfigurationManager.GetSection("system.web/authorization"); 
      if (config.Rules != null && config.Rules.Count > 0) 
      { 

       AuthorizationRule r = config.Rules[0]; //doing this based on implementation of urlauthorization module in reflector... 
       if (r.Action == AuthorizationRuleAction.Allow && r.Users.Contains("*")) 
       { 
        return true; 
       } 

       //todo: check for allow anon ? case 


      } 

      return rslt; 
     } 
+0

Прошу прощения, что я не был чист. Страница уже настроена для вашего описания. Однако у меня есть собственный модуль аутентификации. Я пытаюсь выйти из логики модуля до того, как узнаю идентификатор пользователя, если страница настроена для пользователей = "*" или разрешить пользователям = "?" – complexcipher

ответ

2

Я не уверен, как ваш код вписывается в систему поставщика членства и ролей, но вы пробовали положить за URL переопределения в файле web.config?

<location path="MyAnonymousPage.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 
0

В обычном месте ASP.Net это может быть достигнуто с помощью следующего кода:

IPrincipal anonUser = new GenericPrincipal(new GenericIdentity(string.Empty, string.Empty), new string[0]); 

bool allowAnon = UrlAuthorizationModule.CheckUrlAccessForPrincipal(requestPath, anonUser, "get"); 

Однако, у меня возникли проблемы с получением его вести себя, как ожидается, в SharePoint.