asp. net роль поставщика GetRolesForUser против IsUserInRole - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть приложение asp. net webforms, настроенное для аутентификации форм с использованием ActiveDirectoryMembershipProvider:

<authorization>    
  <deny users="?" />
  <allow roles="MyGroup"/>
  <deny users="*"/>
</authorization>

<membership defaultProvider="ActiveDirectoryMembershipProvider">
    <providers>
    <clear />
    <add name="ActiveDirectoryMembershipProvider" 
            type="System.Web.Security.ActiveDirectoryMembershipProvider" 
            connectionStringName="ADAuth" 
            attributeMapUsername="sAMAccountName" />
    </providers>
</membership>

Для своей страницы входа я использую asp: Контроль входа в систему:

<asp:Login ID="Login1" runat="server" RenderOuterTable="false" RememberMeSet="false">
    <LayoutTemplate>
       ...                
    </LayoutTemplate>
</asp:Login>

Поскольку я хочу ограничить пользователей, входящих в указанную c группу Active Directory, я создаю RoleProvider, который может проверять членство в группе AD. Я создал поставщика ролей и настроил приложение для его использования:

<roleManager enabled="true" defaultProvider="ActiveDirectoryRoleProvider">
    <providers>
        <clear/>
        <add name="ActiveDirectoryRoleProvider"
            type="My.ActiveDirectoryRoleProvider"
            connectionStringName="ADAuth"/>
    </providers>
</roleManager>

Веб-приложение корректно ограничивает доступ. Однако это происходит путем вызова функции GetRolesForUser (string username) объекта RoleProvider. И это может сделать этот вызов 3 или 4 раза для каждой страницы.

Поэтому мой вопрос заключается в том, почему фреймворк вызывает GetRolesForUser, когда провайдер также предоставляет метод IsUserInRole, который может быть менее дорогим, потому что GetRulesForUser должен вернуть все роли, которые есть у пользователя, против проверки одной роли и возврата true / false? И зачем это нужно делать несколько раз?

...