2014-09-24 1 views
2

У меня есть basecontroller, который имеет свойство, как:Может ли фильтр получить доступ к свойствам моего базового контроллера?

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

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

Теперь я хочу создать Filer действий, который я мог бы установить на контроллерах или действиях, которые я хочу сделать что-то вроде:

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

фильтра будет срабатывать после базового контроллера правильный? –

+0

Нет, фильтр действий будет срабатывать перед контроллером onexecuting, но авторизация запускается до выполнения действия. Попробуйте приведенный выше код в вашем фильтре действий и в вашем базовом контроллере вы можете переопределить OnAuthorization вместо OnActionExecuting. – artm

+0

, похоже, работает без меня, меняя его на OnAuth –

 Смежные вопросы

  • Нет связанных вопросов^_^