【问题标题】:Using a fluent security custom policy with castle windsor对城堡温莎使用流畅的安全自定义策略
【发布时间】:2014-10-28 14:11:16
【问题描述】:

我有 Fluent Security 设置(和工作)来保护我的控制器操作,并使用 Castle Windsor 来解决所有问题(几乎如您可以下载的 castlewindsor-fluentsecurity 项目中所示)。我现在要做的是创建一个在我们的 Active Directory 上运行查询的自定义策略。我创建了一个实现 ISecurityPolicy 的测试策略,但它没有默认构造函数,因为我需要注入接口来访问 AD。这是政策:-

 public class TestPolicy : ISecurityPolicy
{
    private readonly IQueryHandler<GetUserQuery, User> userQueryHandler;

    public TestPolicy(IQueryHandler<GetUserQuery, User> userQueryHandler)
    {
        this.userQueryHandler = userQueryHandler;
    }
    public PolicyResult Enforce(ISecurityContext context)
    {
        var adUser = userQueryHandler.Handle(new GetUserQuery());

        if (adUser.HasManager())
        {
            return PolicyResult.CreateSuccessResult(this);
        }
        return PolicyResult.CreateFailureResult(this, "Access denied!");
    }
}

IQueryHandler 在别处使用并正确解析。 我将策略添加到控制器:-

configuration.For<Areas.People.Controllers.InfoController>().AddPolicy<TestPolicy>();

但是当调用它时会失败:- 无法加载 TestPolicy!确保策略有一个空的构造函数或在你的 IoC 容器中注册。 现在查看文档,我似乎错过了告诉 SecurityConfigurator 我正在使用 IoC 的步骤。文档没有显示特定的温莎城堡示例,但我“想出了”:-

SecurityConfigurator.Configure(configuration => configuration.ResolveServicesUsing(type => _container.ResolveAll(type).Cast<object>()));

它不起作用,当 SecurityConfig.RegisterSecurityRules() 被调用时,SecurityConfigurator 需要 Castle Windsor 容器似乎很奇怪,我已经完成了 Castle Windsor。 谁能告诉我在这种情况下我应该如何配置 Fluent Security?

【问题讨论】:

    标签: c# castle-windsor fluent-security


    【解决方案1】:

    好的 - 好吧,我终于让它工作了:
    在 SecurityConfigurator 我有
    configuration.ResolveServicesUsing( type => container.ResolveAll(type).Cast<object>(), type => container.Kernel.HasComponent(type) ? container.Resolve(type) : null );
    我更改了控制器策略以添加接口,而不是实际的策略:

    configuration.For<Areas.People.Controllers.InfoController>().AddPolicy<ITestPolicy>();
    


    该接口实现 ISecurityPolicy:

        public interface ITestPolicy : ISecurityPolicy
    {
    }
    


    然后可以将接口与 Castle 连接起来:

    container.Register(Component.For<ITestPolicy>().ImplementedBy<TestPolicy>());
    


    我认为 Fluent Docs 的 custom policy examples 可以说您需要使用策略接口,以便 CastleWindsor 可以解决它......(除非我用错了!)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      相关资源
      最近更新 更多