#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, второе издание
Кристиан Дайр, Зак Рувалкаба