恐怕,Rhino Security 依赖于 Nhibernate 才能工作。
几个月来我一直在评估 Rhino Security,最后,我决定使用它,因为它是一个非常好的产品。您可以在 Ayende 的博客或此处
找到有用的信息。我在将它与 StructureMap(而不是 Castle Windsor)集成时有点费力。你可以在这里找到一些信息。
要完成您想要实现的目标,您必须定义一个实现 IEntityInformationExtractor 接口的类。
首先,您必须添加以下参考资料(我已经使用 NH 3.0 重新编译了 Rhino Security)到:
- Microsoft.Practices.ServiceLocation
- 休眠
- NHibernate.ByteCode.Castle
- 结构图
- Rhino.Security
- 结构映射适配器
然后定义一个引导程序:
public static class Bootstrapper
{
public static void Initialize()
{
ObjectFactory.Initialize(cfg =>
{
cfg.UseDefaultStructureMapConfigFile = false;
cfg.IgnoreStructureMapConfig = true;
cfg.AddRegistry<StructureMapRegistry>();
});
ServiceLocator.SetLocatorProvider(() => new StructureMapServiceLocator(ObjectFactory.Container));
}
}
然后定义 StructureMap 注册表类:
public class StructureMapRegistry : Registry
{
public StructureMapRegistry()
{
string ConnDb = "Data Source=(local); Initial Catalog=RhinoSecurity_Test; Trusted_Connection=true;";
For<ISessionFactory>()
.Singleton()
.TheDefault.Is.ConstructedBy(() => new NHSessionFactory(ConnDb, false).SessionFactory);
For<ISession>()
.Singleton()
.TheDefault.Is.ConstructedBy(x => x.GetInstance<ISessionFactory>().OpenSession());
For<IAuthorizationRepository>()
.Use<AuthorizationRepository>();
For<IPermissionsService>()
.Use<PermissionsService>();
For<IAuthorizationService>()
.Use<AuthorizationService>();
For<IPermissionsBuilderService>()
.Use<PermissionsBuilderService>();
For<IEntityInformationExtractor<Model.Task>>()
.Use(p =>
{
return (new TaskInfromationExtractor(p.GetInstance<ISession>()));
});
}
}
NHSessionFactory基本上是创建一个 NH 会话工厂。
我创建了一个实现 IEntityInformationExtractor的类 ( TaskInfromationExtractor )。这将允许您为任务实体定义权限。现在您的应用程序已准备就绪。你只需要“引导”结构图:
当你的应用程序启动时,你会这样做。现在您可以使用 Rhino 安全存储库和服务来创建用户、组、关系等,就像我给您建议的链接一样。你可以在这里找到我准备的样本