Я спросил 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
?
почему вы не можете установить ролевую/заявка IsAdmin на проверку подлинности? Затем вы можете проверить его в MyCaching – Bombinosh