首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止访问MVC 4中的路由

阻止访问MVC 4中的路由
EN

Stack Overflow用户
提问于 2013-03-08 01:49:15
回答 2查看 164关注 0票数 1

在我的MVC应用程序中,我有PlayerCoach对象,用户可以是其中之一。我也有Team对象,我想知道的是如何阻止Players列表中的用户或TeamCoach访问像/Teams/Details/2这样的路由,其中2是团队的id,而不是他/她所在的团队。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-08 01:53:00

由于您希望限制一个不属于它们的id,因此这种情况似乎可以从AuthorizeAttribute继承并为AuthorizeCore提供您的实现

你的实现可以检查他们的角色/团队id,并决定做什么/重定向。

代码语言:javascript
复制
public class TeamAuthorize : AuthorizeAttribute
{

  protected override bool AuthorizeCore(HttpContextBase httpContext)
  {
    return UserIsInTeam(httpContext); //whatever code you are using to check if the team id is right      

  }

}

现在,您可以像应用任何其他属性一样应用它。

代码语言:javascript
复制
[TeamAuthorize]
票数 0
EN

Stack Overflow用户

发布于 2013-03-08 02:06:27

最简单的解决方案是将URL从使用ID更改为随机GUID。您几乎可以消除有人猜测另一个有效值的可能性。当然,根据定义,这是不安全的(主要是因为有人可以从历史或其他来源获得另一个URL ),但在某些情况下,这就足够了。

更好的解决方案是基于实现OnActionExecuting方法的IActionFilter接口创建一个新属性,并使用this.ControllerContext.HttpContext.User.Identity.Namethis.RouteData.Values["id"]检查ID。然后将该属性应用于控制器方法。

在我们当前的系统中,我们在控制器方法中实现了行级安全性,只需在每个方法中添加验证用户权限的代码作为第一行。检查代码与属性相同,并且需要添加相同数量的代码。这种方法还有一个额外的好处--更容易实现这样的场景,即教练可以看到其他团队的详细信息,但不能修改它们(我们有一个动作和视图,用于根据权限读取和更新)。

如果你需要去数据库检查权限,并且你正在使用IoC框架,比如基于构造函数的注入,你也可以使用最后一种方法-因为你不能访问属性中的那些值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15278188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档