最近Rhino.Securityをダウンロードしましたが、エンティティに権限を実装しようとしています。Ninject(v2)が好きなので、最初に簡単な例をまとめたいと思います。NinjectModuleで、リポジトリとサービスをバインドしました。
Bind<ISessionFactory>()
.ToProvider(new SessionFactoryProvider())
.InSingletonScope();
Bind<ISession>().ToProvider(new SessionProvider())
.InSingletonScope();
Bind<IAuthorizationRepository>()
.To<AuthorizationRepository>()
.InSingletonScope();
Bind<IPermissionsService>()
.To<PermissionsService>()
.InSingletonScope();
Bind<IAuthorizationService>()
.To<AuthorizationService>()
.InSingletonScope();
Bind<IPermissionsBuilderService>()
.To<PermissionsBuilderService>()
.InSingletonScope();
私はコンソールアプリですべてをテストしていますが、すべて正常に動作します。このテストは問題なく実行できます。
public void RunTest()
{
Model.User user1;
Rhino.Security.Model.UsersGroup grp1;
using (session)
{
session.BeginTransaction();
user1 = new Model.User { Name = "xxx xxx" };
session.Save(user1);
session.Flush();
grp1 = authorizationRepository.CreateUsersGroup("Administrators");
session.Flush();
authorizationRepository.AssociateUserWith(user1, grp1);
session.Flush();
var OpAccountEdit = authorizationRepository.CreateOperation("/Account/Edit");
session.Flush();
permissionsBuilderService
.Allow(OpAccountEdit)
.For(grp1)
.OnEverything()
.Level(10)
.Save();
permissionsBuilderService
.Deny(OpAccountEdit)
.For(user1)
.OnEverything()
.Level(10)
.Save();
Console.WriteLine(authorizationService.IsAllowed(user1, "/Account/Edit"));
session.Transaction.Rollback();
Console.ReadLine();
}
}
ここで、アカウントの権限を定義したいと思います。このようなもの:
account1 = new Model.Account() { Name = "My Account", SecurityKey = new Guid(), Id = 1 };
session.Save(account1);
session.Flush();
permissionsBuilderService
.Allow("/Account/Delete")
.For(user1)
.On(account1)
.Level(20)
.Save();
ソリューションで見つかったサンプルコードでAyendeが行ったように、クラスを定義しました。
public class AccountInfromationExtractor : IEntityInformationExtractor<Model.Account>
{
...
}
そして、私は(私のninjectモジュールで)インターフェースIEntityInformationExtractorをクラスにバインドしようとしました
Bind<IEntityInformationExtractor<Model.Account>>()
.To<AccountInfromationExtractor>();
しかし、アプリを実行すると、「オブジェクトのインスタンスに設定されていないオブジェクト参照」が表示されます。Securityクラスで。サービスロケーターはインスタンスを解決できず、ここで例外が生成されます。
var extractor = ServiceLocator.Current.GetInstance<IEntityInformationExtractor<TEntity>>();
Rhino.SecurityでNinjectを使おうとして、私を助けてくれる人はいますか?
ありがとう