2013-04-25 46 views
0

我想要求所有用户在进入需要身份验证的网站的任何部分之前填写一些其他信息。MVC4拦截需要身份验证的所有请求

如果有可能,我想捉对[Authorize]注解,但忽略任何@User.IsInRole("something")

有没有我可以在Global.asax或覆盖的方法?

我只希望抓住注释,因为我只用于.IsInRole()是向他们显示不同的信息,我想要那里的链接,所以他们实际上看到什么是需要注释。希望这是有道理的(有点厌倦)。

回答

0

您可以覆盖AuthorizeAttribute本身;这会让您访问OnActionExecuting()方法,该方法在标有[Authorize]标记的操作被调用时被触发。从那里你可以添加你自己的认证逻辑或者调用基本方法,然后重定向到适当的错误或者表单,如果额外的数据需要填写的话。你应该能够将它们的原始请求作为返回URL查询参数,以便用户可以在一旦额外的数据被照顾后继续到他们去的地方。然后,您需要用此自定义属性替换[Authorize]的所有用途,但查找和替换应该注意这一点。

+0

我实际上已经实现了我自己的'[Auth()]'属性。不过,我希望确保如果有其他人进行了开发(或者我忘记了),那么在全球范围内有一些东西可以捕捉到错误。 – Jared 2013-04-25 13:47:30

+0

从安全角度来看,我们通常会采用并且稍微好一点的方法是颠倒属性。这样你就不需要在需要认证的控制器上指定它,但是在那些不需要认证的控制器上。这样,开发者不需要记住,并且如果他们尝试访问某些内容并且无法访问,就会发现速度非常快。 – Jakub 2013-04-26 09:21:03