I recently downloaded Rhino.Security, and I'm trying to implement permissions for an object. Since I like Ninject (v2), I would like to put together a simple example to get you started. In my NinjectModule, I linked the repository and services:
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();
I am testing everything in a console application and everything is working fine. I can run this test without problems:
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(); } }
Now I would like to determine the permission for the account; something like that:
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();
I defined my class, as Ayende did in the code example found in the solution:
public class AccountInfromationExtractor : IEntityInformationExtractor<Model.Account> { ... }
and I tried to associate (in my ninject module) the IEntityInformationExtractor interface with the class
Bind<IEntityInformationExtractor<Model.Account>>() .To<AccountInfromationExtractor>();
but when I run my application, I get the link " Object not installed in the instance of the object ." in the safety class. The service locator cannot resolve the instance, and it generates and excludes here:
var extractor = ServiceLocator.Current.GetInstance<IEntityInformationExtractor<TEntity>>();
Is there anyone who tried to use Ninject with Rhino.Security and could help me?
thanks