我正在使用Web Forms开发小型的部门级应用程序。技术选择来自过去,因为应用程序基于已经存在的旧应用程序+ Web Forms似乎对我们的案例非常快速和高效。
VS 2015中的默认模板会创建所有登录页面等。我将角色分配给用户。问题是如何保护特定文件夹或页面仅供具有特定角色的用户使用?
我唯一的想法是:
If Not Page.User.Identity.IsAuthenticated or Not Page.User.Identity.IsInRole("MyRole") Then
Response.Redirect("~/Account/Login?ReturnUrl=" & Server.UrlEncode(Request.Url.ToString())
End If
在应用程序中有很多页面是不方便的。我看到MVC用属性
解决了这个问题[Authorize( Roles = Constants.ADMIN )]
实现这一目标的最佳方法是什么?请指教。
答案 0 :(得分:1)
您可以限制对Web.config中页面和文件夹的访问,而不是在每个页面上编写If Then Else
代码。
...实例
限制对特定网页的访问权限
<location path="SecureFolder/SecurePage.aspx" >
<system.web>
<authorization>
<deny users="*"/>
<allow roles="Manager,Admin"/>
</authorization>
</system.web>
</location>
将特定文件夹的访问权限限制为特定角色
<location path="AdminFolder" >
<system.web>
<authorization>
<deny users="*"/>
<allow roles="Admin"/>
</authorization>
</system.web>
</location>
您需要为要保护的应用程序中的所有页面和文件夹重复<location>
元素。
有关MSDN的更多信息,请访问:Run wine in parallel with gnu-parallel - needs {%} slot substitution to work
文件夹级别的Web.config示例
将所有内容放在Web应用程序的主Web.config中的替代方法是在需要保护的每个文件夹中创建一个Web.config文件。执行此操作时,您在文件夹的Web.config文件中不需要任何其他内容,并且您不需要包含<location>
元素
e.g。您可以在AdminFolder目录中创建一个仅包含以下代码的新Web.config文件,而不是将AdminFolder配置放在主Web.config文件中。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<deny users ="*" />
</authorization>
</system.web>
</configuration>