Боюсь, Rhino Security зависит от работы Nhibernate.
Я оцениваю Rhino Security в течение нескольких месяцев, и в конце концов я решил использовать его, потому что это действительно очень хороший продукт.
Хорошую полезную информацию вы можете найти в блоге Ayende или здесь .Я немного потрудился, чтобы интегрировать его в StructureMap (вместо Castle Windsor).Вы можете найти некоторую информацию здесь .
Чтобы сделать то, что вы пытаетесь достичь, вы должны определить класс, который реализует интерфейс IEntityInformationExtractor.
Прежде всего вы должны добавитьследующие ссылки (я перекомпилировал Rhino Security с NH 3.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.
Я создал класс ( TaskInfromationExtractor ), который реализует IEntityInformationExtractor.Это позволит вам определить разрешения для объекта задачи.Теперь ваше приложение готово.Вам просто нужно "загрузить" карту структуры:
- Bootstrapper.Initialize ();
Это можно сделать при запуске приложения.Теперь вы можете использовать репозиторий и службы безопасности Rhino для создания пользователей, групп, отношений и т. Д., Как я вам предлагаю.Вы можете найти образец, который я подготовил здесь