Где в конвейере ASP.NET подключается RoleProvider?

Единственное известное мне место, где используется RoleProvider, это когда вы используете атрибут Authorize. Где еще я могу использовать RoleProvider и вызывается ли он где-либо, кроме мест, где я мог бы специально ссылаться на роли (я думаю, что это похоже на то, как элементы управления входом автоматически используют MembershipProvider)

Другими словами, если я напишу свой собственный уровень управления ролями, но не реализую фактический контракт RoleProvider, какие встроенные функции в ASP.NET я упущу?


person kenwarner    schedule 27.05.2011    source источник
comment
возможный дубликат ASP.NET MVC — альтернатива поставщику ролей?   -  person KP.    schedule 30.05.2011


Ответы (2)


Вот несколько способов, которыми встроенный RoleProvider добавляет ценность:

1: Элемент управления LoginView использует роли, чтобы вы могли показывать разный контент разным ролям. Для этого он подключится к RoleProvider.

Пример использования ролей с элементом управления LoginView:

<asp:LoginView id="LoginView1" runat="server">
    <RoleGroups>
        <asp:RoleGroup Roles="author">
            <ContentTemplate>
                some content here based on if user is in 'author' role....
            </ContentTemplate>
        </asp:RoleGroup>
        <asp:RoleGroup Roles="editor">
            <ContentTemplate>
                some content here based on if user is in 'editor' role....
            </ContentTemplate>
        </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>

2. Вы можете предоставить доступ к физическим путям на сервере (т. е. к подпапкам и т. д.) с помощью настроек web.config, например:

<configuration>
  <location path="MemberPages">
    <system.web>
      <authorization>
        <allow roles="members, administrators" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- other configuration settings here -->
<configuration>

3. Вы можете легко определять роли пользователей и выполнять действия в коде, например:

if (User.IsInRole("members"))
{
   //do something
}
else
{
   //do something else
}

У этого списка нет конца. Честно говоря, это обсуждение обсуждалось много раз — не изобретайте велосипед, создавая свою собственную ролевую систему. Просто реализуйте поставщика абстрактных ролей и покончите с этим. Вот хорошая статья, посвященная управлению ролями в ASP.NET.

РЕДАКТИРОВАТЬ: После того, как вы уточнили, что на самом деле хотите знать, какие преимущества дает вам RoleProvider в рамках MVC, вот что вам нужно:

ASP.NET MVC — альтернатива поставщику ролей?

person KP.    schedule 27.05.2011
comment
Спасибо. Можете ли вы указать мне, в каком направлении список можно продолжать и отчасти? Я использую asp.net mvc, поэтому № 1 и № 2 для меня мало что делают. Я уже получаю № 3 в своей модели данных. - person kenwarner; 28.05.2011
comment
Пара вещей - ваша формулировка вопроса относится к ее использованию в ASP.NET (не MVC), хотя она помечена обоими, поэтому я бы предложил пересмотреть ее, если вы хотите конкретно узнать, как поставщик ролей помогает вам с MVC. Во-вторых, основа для модели провайдера встроена. Все, что вам нужно сделать, это переопределить несколько методов. Мне трудно представить более быстрый маршрут через пользовательскую модель данных или другие средства. Функции помимо времени разработки должны быть быстрее благодаря существующей инфраструктуре. - person KP.; 30.05.2011
comment
Этот вопрос касается ASP.NET в целом, будь то веб-формы или mvc (кстати, я упомянул AuthorizeAttribute в своем OP, который является MVC). мое конкретное обстоятельство касается MVC и получу ли я какую-либо выгоду от использования RoleProvider. Ваши № 1-3 были именно той информацией, которую я искал, а не другим ТАКИМ вопросом, который вы разместили. Если нет других причин для создания RoleProvider, кроме # 1-3, я, вероятно, в конечном итоге сделаю что-то в соответствии с этим пользовательским интерфейсом в другом вопросе. - person kenwarner; 30.05.2011

Прямой ответ на ваш вопрос будет "Нет". RoleProvider или любой другой поставщик не участвуют в основном потоке конвейера ASP.Net, а запрос ASP.Net не требует никакого поставщика ролей для выполнения запроса.

Вместо того, чтобы помещать технический материал, я бы ответил более философски и уважал усилия, приложенные КП в ответе.

RoleProvider — это, по сути, функциональное дополнение к ASP.Net, которое позволяет вам работать с вашей ролевой системой без необходимости знать какие-либо функциональные детали во время выполнения. В ASP.Net 2.0 представлен совершенно новый способ работы с пользователями и ролями. Вместо предоставления интегрированного управления пользователями и ролями они решили сделать его расширяемым, но простым в использовании. Они создали новый шаблон под названием «Поставщик» и предоставили поставщиков по умолчанию для каждой функциональности, такой как пользователь, роль и сеанс. Они известны как MembershipProvider, RoleProvider и SessionProvider. Однако Microsoft не ограничивает вас в использовании только поставщиков, поставляемых с ASP.Net 2.0. Вы можете определить свой собственный MembershipProvider и объявить его в web.config поставщиком по умолчанию. Класс ProviderBase заставит вас реализовать каждый метод, чтобы обеспечить слаженную работу, и когда вы сделаете их по умолчанию из web.config, во время выполнения вам не нужно знать подробности любого целевого поставщика, который может быть у вас в системе. Клиентский код согласован для любого конкретного поставщика.

Надеюсь это поможет.

person this. __curious_geek    schedule 30.05.2011