2010-10-11 24 views
0

J'utilise S # arp architecture 1.6 et ont mis en œuvre l'intégration de sécurité Rhino parS # arp Architecture - Sécurité Rhino (classe unmapped: Rhino.Security.IUser)

Rhino Security - S#arp Architecture

Je suis en utilisant la dernière version de Rhino.Commons

Ma méthode Application_EndRequest contient

ISession session = NHibernateSession.Current; 

Mon ComponentRegister.cs contient

 container.Kernel.Register(

      Component.For<IAuthorizationService>() 
       .ImplementedBy<AuthorizationService>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IAuthorizationRepository>() 
       .ImplementedBy<AuthorizationRepository>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IPermissionsBuilderService>() 
       .ImplementedBy<PermissionsBuilderService>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IPermissionsService>() 
       .ImplementedBy<PermissionsService>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IUnitOfWorkFactory>() 
       .ImplementedBy<NHibernateUnitOfWorkFactory>() 
       .LifeStyle.Is(LifestyleType.Singleton), 
      Component.For<Rhino.Commons.IRepository<User>>() 
       .ImplementedBy<NHRepository<User>>() 
       .LifeStyle.Is(LifestyleType.Transient) 
      ); 


     container.AddFacility<FactorySupportFacility>() 
      .Register(Component.For<ISession>() 
      .UsingFactoryMethod(() => NHibernateSession.Current) 
      .LifeStyle.Is(LifestyleType.Transient)); 

J'ai également ajouté RhinoSecurityPersistenceConfigurer() selon les instructions.

L'erreur que je suis recieving à appeler

UnitOfWork.Start() 

est

An association from the table Permissions refers to an unmapped class: Rhino.Security.IUser 

Est-ce que quelqu'un sait ce que la cause de cette erreur peut être?

Est-ce que quelqu'un a intégré avec succès Rhino.Security avec l'architecture S # arp?

Toute aide serait géniale.

Merci

Rich

- Détails supplémentaires -

Merci pour toutes les réponses à ce jour.

Je n'ai toujours pas été capable de résoudre ce problème, alors j'ai pensé ajouter plus de détails.

Dans mes Global.asax.cs je

private void InitializeNHibernateSession() 
{ 
    NHibernateSession.Init(
    webSessionStorage, 
    new string[] { Server.MapPath("~/bin/SwitchSnapshot.Data.dll") }, 
    new AutoPersistenceModelGenerator().Generate(), 
    Server.MapPath("~/NHibernate.config"), 
    null, null, new RhinoSecurityPersistenceConfigurer()); 
} 

RhinoSecurityPersistenceConfigurer:

public Configuration ConfigureProperties(Configuration nhibernateConfig) 
{ 
    Security.Configure<User>(nhibernateConfig, SecurityTableStructure.Prefix); 
    return nhibernateConfig; 
} 

J'ai un AuthorizationAttribute qui appelle

using (UnitOfWork.Start()) 

L'erreur est dans NHibernateUnitOfWorkFactory.cs INTERVENUES comme

sessionFactory = cfg.BuildSessionFactory(); 
+0

Vous devez appeler '' Security.Configure après '' ConfigureNHibernate' mais avant BuildSessionFactory'. Vous devrez faire une petite modification au fichier source 'NHibernateSession' de S # arpArch pour le faire. –

Répondre

0

Merci à tous ceux qui ont aidé.

En fin de compte c'était ma faute. Je devais suivre un peu mieux le S#arp Architecture Instructions.

D'une ancienne version de S # arp j'avais 2 fichiers de configuration hibernate.cfg.xml et NHibernate.config. Je pensais que j'avais toujours besoin des deux, mais tout ce dont j'avais besoin était hibernate.cfg.xml pour S # arp version 1.6 et mappé User.cs en utilisant Fluent NHibernate.

D'autres changements que j'ai été dans ComponentRegister.cs

 container.Kernel.Register( 
      Component.For<IAuthorizationService>() 
       .ImplementedBy<AuthorizationService>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IAuthorizationRepository>() 
       .ImplementedBy<AuthorizationRepository>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IPermissionsBuilderService>() 
       .ImplementedBy<PermissionsBuilderService>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IPermissionsService>() 
       .ImplementedBy<PermissionsService>() 
       .LifeStyle.Is(LifestyleType.Transient), 
      Component.For<IUnitOfWorkFactory>() 
       .ImplementedBy<NHibernateUnitOfWorkFactory>() 
       .LifeStyle.Is(LifestyleType.Singleton), 
      Component.For<Rhino.Commons.IRepository<User>>() 
       .ImplementedBy<NHRepository<User>>() 
       .LifeStyle.Is(LifestyleType.Transient) 
     ); 

     container.Kernel.AddFacility<FactorySupportFacility>() 
      .Register(Component.For<ISession>() 
      .UsingFactoryMethod(() => NHibernateSession.Current) 
      .LifeStyle.Is(LifestyleType.Transient) 
     ); 

Ensuite, utilisez ce qui suit dans mon code.

 var authorizationService = IoC.Resolve<IAuthorizationService>(); 

     using (UnitOfWork.Start()) 
     { 
     } 
+0

Dans quel nsamespace je peux trouver la classe IoC que vous avez utilisée dans IoC.Resolve <>() –

+0

IoC est dans Rhino.Commons – RichG

+0

Salut , le lien http://wiki.sharparchitecture.net/RhinoSecurity.ashx fourni ci-dessus ne pointe plus vers les instructions de Rhino.Security. Connaissez-vous une autre source pour ces instructions? Merci – Forer

0

Vous avez besoin d'un mappage NHibernate pour votre classe User (c.-à-d. la classe qui implémente l'interface IUser). Vous avez également besoin d'une table dans la base de données avec les champs appropriés pour votre classe User.

+0

Merci Dan, j'ai la classe d'utilisateur mappée dans user.hbm.xml et la classe d'utilisateurs implémentant IUser, ils sont tous correctement mappés aux champs de base de données aussi. – RichG

+0

L'interface IUser ne devrait-elle pas être mappée? C'était l'erreur dite. Juste deviner n'a jamais fonctionné avec Rhino mais cette erreur est normalement que la classe/interface n'est pas mappée correctement – Homer1980ar