控制器

时间:2016-04-22 12:52:46

标签: c# asp.net asp.net-mvc attributes httpcontext

我问a similar question答案是我根本不需要这样做。虽然这对于这种方法是正确的,但这对我没有帮助。

我有以下行动:

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

MyUserAuth是一个属性,用于检查用户是否具有获取数据的权限。此信息从数据库中检索,无法通过HttpContext(纯粹)检索。一些用户是管理员应该看到更多。

如果用户具有正常访问权限(如90%的用户),[MyCaching] - 属性中的缓存机制应该开始,内容应该从缓存中返回。

如果是管理员,则不应返回缓存而不填写缓存,因为内容不同。

所以我需要找到一种方法让[MyUserAuth]告诉[MyCaching]这些信息。有没有直接的方法来实现这一目标? 如果没有,我可以“滥用”HttpContext吗? E.g:

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 个答案:

答案 0 :(得分:0)

您可以在身份验证上设置角色或声明'isAdmin',您可以通过HttpContext在MyCaching中查看

相关问题