恐れ入りますが、RhinoSecurityはNhibernateに依存しています。
私はRhinoSecurityを数か月間評価してきましたが、最終的には、本当に優れた製品であるため、RhinoSecurityを使用することにしました。Ayendeのブログまたはここで
役立つ情報を見つけることができます。(Castle Windsorの代わりに)StructureMapと統合するために少し苦労しました。ここでいくつかの情報を見つけることができます。
達成しようとしていることを実行するには、IEntityInformationExtractorインターフェースを実装するクラスを定義する必要があります。
まず、次の参照を追加する必要があります(RhinoSecurityをNH3.0で再コンパイルしました)。
- Microsoft.Practices.ServiceLocation
- NHibernate
- NHibernate.ByteCode.Castle
- StructureMap
- Rhino.Security
- StructureMapAdapter
次に、ブートストラッパーを定義します。
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)を作成しました。これにより、タスクエンティティの権限を定義できます。これでアプリの準備が整いました。構造マップを「ブートストラップ」する必要があります。
- Bootstrapper.Initialize();
これは、アプリの起動時に行います。これで、Rhinoセキュリティリポジトリとサービスを使用して、ユーザー、グループ、リレーションなどを作成できます。これは、私が提案したリンクです。私が用意したサンプルはここにあります