2015-11-24 24 views
0

我正在尝试为我的BaseController执行自定义策略。此策略的目的是防止每个其他控制器中的代码重复。ASP.NET 5自定义策略中的访问会话

services.AddAuthorization(options => 
{ 
    options.AddPolicy("PolicyName", policy => 
    { 
     policy.AddRequirements(*INSERT POLICY HERE*); 
    }); 
}); 

试图添加策略像这样在ConfigureServices方法Startup.cs

有什么收获?

我想在我的策略中访问Session,因为我在计算中需要它。我使用依赖注入IHttpContextAccessor来做到这一点。

问题出现在INSERT POLICY HERE部分。因为我认为(从我在网上看到的):new MyPolicy()

但是这并不起作用,因为它需要IHttpContextAccessor

我怎样才能将它转化为保单?如果有更好的方法,请随时分享

回答

0

您在线看到的示例已经过简化,但您不必在同一个班级中拥有该策略和要求。要求基本上是数据 - 例如一个年龄要求将持有你想检查的年龄。因此,将需求分为自己的类,然后您可以在没有DI问题的情况下重新创建它,并且通过DI容器根据需要新增策略。

+0

我会尽快尝试。对不起,反馈迟了,但我一直没能找到这个 – Lokuzt

+0

所以我有一个SessionUtils类(所以我不必在每个策略中都使用相同的操作)。这个类使用IHttpContextAccessor。我如何将其包含在要求中?或者是一个SessionUtils类是一个坏主意? – Lokuzt

+0

所以你可以实现多个处理程序的要求(我现在正在写文档实际上)。处理程序也可以处理多个需求。因此,例如,如果您想要门禁系统需求,您需要编写一个处理程序,用于检查员工是否有徽章,并检查当前身份是否为保安人员,然后在服务集合中注册这两个处理程序。那么当一个政策想要这个要求时,它会检查*两个*处理程序,并且如果任何一个成功通过了策略。 – blowdart