我在mvc中覆盖AuthorizeCore函数以进行身份验证和授权,当我调用视图表单控制器时,这工作正常。但现在我有一个视图,其中包含一些报告链接,我想向具有访问权限的用户显示报告。我可以隐藏报告链接,但无法限制直接网址。
这个网址请求很好[http:// MyDomain:1426 /公司/索引]但是 当url是:[http:// MyDomain:1426 / Reports / GrpView?OfferID = 1](因为我没有报告控制器)时,不会使用authorizecore方法 在MVC中有什么方法可以过滤视图网址吗?
答案 0 :(得分:0)
提供报告功能的Reports/GrpView
处理程序不是很清楚。它似乎不是ASP.NET MVC控制器操作,因为您将使用[Authorize]
属性对其进行修饰并指定角色。
如果这是遗留的WebForms页面或处理程序,您可以使用<location>
中的web.config
部分来控制访问权限:
<location path="Reports/GrpView">
<system.web>
<authorization>
<!-- deny access to all users -->
<deny users="*"/>
<!-- allow access to users in the "admins" role -->
<allow roles="admins"/>
</authorization>
</system.web>
</location>
Authorize
属性(以及从中派生的任何自定义属性)仅用于保护对ASP.NET MVC控制器操作的访问。如果您没有将ASP.NET MVC用于报告服务,则无法使用这些机制。
答案 1 :(得分:0)
我的报告在.aspx页面上,我将其放入报告视图文件夹(不良方法)。正如达林迪米特洛夫所说 为什么这个ASPX页面在你的Views文件夹中?此文件夹中的文件只能通过控制器操作提供。你不能在那里拥有经典的WebForms页面。因此,您必须拥有一个名为ReportsController的控制器,其中包含一个名为GrpView的操作,您可以使用[Authorize(Roles =“admins”)]属性进行装饰。另一方面,如果这是一个经典的WebForms页面,则需要将其从Views文件夹中移开,然后指定其路径。通过使用这种方法,我无法通过我的调用形式AuthorizeCore函数。
/// 我在.aspx页面上处理角色权限管理。如果有人找到任何其他解决方案,那么请分享。