MVC控制器列表中新建一个文件夹AuthOnly,下面新建一个个控制器AuthController和配置文件Web.Config,配置文件内容设置访问权限
<authorization>
<deny users="*" />
</authorization>
现在我在Controller下面的Home控制器Index视图中有个跳转
<a href="/AuthOnly/Auth/Index">click me</a>
这样竟然可以跳过权限设置直接访问Auth控制器下的Index视图,但是我要是改成
<a href="~/Controllers/AuthOnly/Auth/Index">click me</a>
这样就拒绝访问了,跳转到默认登录页面,为什么?提供下路由配置信息
routes.MapRoute(
name: "AuthOnly",
url: "AuthOnly/{controller}/{action}/{id}",
defaults: new { controller = "Auth", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "User", action = "Index", id = UrlParameter.Optional }
);
你应该建立一个对path的授权,而不是在authonly文件夹下创建web.config来解决,比如:
<LocalPath path="AuthOnly">
...
</LocalPath>
(以上拼写你自己校验下)
是location吧?谢谢你的提醒,我用下面配置解决了,删除了子文件夹下的配置文件。
<location path="AuthOnly">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
关于这个问题,暴露了你一个很大的BUG,为啥Auth控制器下的Index视图是可以未经授权就访问的。
确实是这样,但是通过~/Controllers/AuthOnly/Auth/Index这种方式是要求授权才能访问的,临时的解决办法是去掉第一个路由,全部改成~/Controllers/这样就可以了。
我想知道问题所在,为什么加路由后就跳过了权限系统?
@素和墨如: 解决方法不是这样的,是应该在Controller里面加入验证机制。
你不能保证没有谁心血来潮或者灵感突飞就知道了你的浏览路径直接在地址栏上输入的。
@爱编程的大叔: 添加额外的验证是很有必要,但是我好奇的是为什么会出现我所描述的这个问题。只是求情的方式不一样为什么会有不同的执行结果。
@素和墨如: 你的 ~/Controllers/ 目录下有什么文件?