2016-04-22 2 views
3

Я спросил a similar question, где я ответил, что мне не нужно это делать вообще. Хотя это было правильно для этого подхода, это не помогает мне здесь.Свойства обмена между действиями в контроллере

У меня есть следующие действия:

[MyCaching] 
[MyUserAuth] 
public class MyMagicController:Controller { 
    public ActionResult GetLoans() { 
     return GetLoansForThisUser(); 
    } 
} 

MyUserAuth является атрибутом, который проверяет, если пользователь имеет право доступа, чтобы получить данные. Эта информация извлекается из БД и не может быть восстановлена ​​(чисто) через HttpContext. Несколько пользователей - это администраторы, которые должны увидеть немного больше.

Если пользователь имеет обычный доступ (например, 90% пользователей), Кэширующие механизмы в [MyCaching] - Атрибут должен начинаться, а содержимое должно возвращаться из кеша.

Если это администратор, кэш не должен быть возвращен и не заполнен, поскольку содержимое отличается.

Поэтому мне нужно найти способ для [MyUserAuth] сообщить [MyCaching] эту информацию. Есть ли прямой способ достичь этого? Если нет, могу ли я «неправильно использовать» HttpContext? Например .:

public class MyAuthAttribute:AuthenticationAttribute 
    // ... 
    public void CheckPermissions(HttpContext context) { 
     context.Items.Add("isAdmin",true); 
    } 
} 

public class MyCachingAttribute:ActionAttribute { 
    // ... 
    public void GetCache(HttpContext context) { 
     if (context.Items["isAdmin"]) { 
      return // dontcache; 
     } 
    } 
} 

А затем поставить MyUserAuth как раз перед MyCaching?

+1

почему вы не можете установить ролевую/заявка IsAdmin на проверку подлинности? Затем вы можете проверить его в MyCaching – Bombinosh

ответ

0

Вы можете установить роль или претензии «IsAdmin» на проверку подлинности, которые вы могли бы проверить в MyCaching через HttpContext

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