Ограничить доступ к некоторым .aspx страницам

#c# #asp.net #authorization #privileges

#c# #asp.net #авторизация #привилегии

Вопрос:

У меня есть несколько страниц в формате aspx в моем asp.net веб-приложение, которое может видеть только администратор, и некоторые .aspx страницы, которые могут видеть все пользователи. Как я могу ограничить доступ обычных пользователей к страницам, предназначенным для администратора?

Более того, я не реализую авторизацию из asp.net я хочу сказать, что я сам реализую аутентификацию, используя сеансы и переменные флага. Как я могу ограничить содержимое для пользователей, зависящих от привилегий в этом сценарии?

Ответ №1:

Поместите эти страницы в их собственный каталог и используйте web.config в этом каталоге для ограничения доступа к ним.

 <configuration>
   <system.web>
      <authorization>
         <allow roles="Admins"/>
         <deny users="*"/>
      </authorization>
   </system.web>
</configuration>
  

Не изобретайте велосипед!

Ответ №2:

Я бы, вероятно, создал пользовательскую функцию, конечно, общедоступный метод, который содержит всю логику, основанную на ролях [поскольку вы упомянули, что не хотите использовать функцию членства в asp.net ] чтобы разрешить запретить пользователю доступ к страницам. Этот метод проверит право пользователя на страницу, для лучшей логики вы можете сохранить ключ для всех страниц в web.Config.

Вы можете создать ключ в

    <appsetting>


 <add key="Page1" value="ViewOrders.aspx"/>
<add key="Page2" value="DeleteOrders.aspx"/>
  

Теперь вы можете создать цикл for / foreach в методе для повторения значения ключа для имени страницы. Я сказал это, потому что вам будет легче добавлять страницы позже и назначать им соответствующие роли.

Редактировать

Возможно, вы хотели бы увидеть это http://mywsat.codeplex.com /

Комментарии:

1. что вы подразумеваете под ключом для всех страниц?? Не могли бы вы уточнить это для меня, пожалуйста?

2. @user653622 Я добавил ссылку на свой ответ, который, как я обнаружил, будет полезен для вас.

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

Ответ №3:

Если вы используете свой собственный, вы можете захотеть создать пользовательский поставщик ролей и заставить его возвращать роли для пользователя из сеанса, что, возможно, позволит устранить оба пробела…

HTH.

Комментарии:

1. не могли бы вы развить свою идею для меня, пожалуйста?

2. Роли в системе предоставляются поставщиком ролей, если они включены для определенных функций. Вы могли бы создать пользовательский поставщик ролей, наследующий от System.Web.Security. RoleProvider. В этом классе при обращении к ролям пользователя возвращайте роли, заданные из сеанса.

Ответ №4:

Знаю, что это немного устарело, но на всякий случай, если кто-то еще использует членство. Используйте это в своем web.config:

 <configuration>
  <!-- Only administrators may access AdminTools.aspx -->
  <location path="AdminTools.aspx">
    <system.web>
      <authorization>
        <allow roles="Administrators" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
</configuration>
  

ссылка: Создайте свой собственный ASP.NET Веб-сайт 2.0, использующий C # VB, второе издание
Кристиан Дайр, Зак Рувалкаба