2014-09-24 100 views
2

我有了像一个属性basecontroller:过滤器是否可以从我的BaseController访问属性?

public class BaseController : Controller 
{ 
    public User CurrentUser {get;set;} 

    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // if session cookie found, set User object here 
    } 
} 

现在我想创建一个动作过滤器,我可以在我想要做类似控制器或动作的设置:

if (User.IsAdmin) 
{ 
} 
else 
{ 
    // redirect to login or some page 
} 

所以这个过滤器@AdminOnly我可以把一个控制器或操作,这将确保只有具有IsAdmin标志设置的用户才能够查看该操作。

过滤器是否可以看到当前正在执行的控制器?

回答

3

不能使用

if (filterContext.Controller is BaseController) 
{ 
    BaseController ctr = (BaseController)filterContext.Controller; 
    if (ctr.User.IsAdmin) 
    {....} 
} 

Link

+0

过滤器的基本控制器正确后会火? – 2014-09-24 18:51:34

+0

不,操作过滤器将在控制器执行操作之前触发,但授权在操作执行之前运行。在你的动作过滤器和你的基本控制器中尝试上面的代码,你可以重写OnAuthorization而不是OnActionExecuting。 – artm 2014-09-24 19:06:28

+0

似乎没有我改变它OnAuth – 2014-09-24 20:42:40

相关问题