Question

Je suis en train de créer le système de sécurité du logiciel im création et je voudrais savoir comment je peux faire ce qui suit dans NHibernate (si possible)

de compte d'utilisateur Classe:

public class UserAccount
{
    public virtual int UserID { get; set; }
    public virtual String Username { get; set; }
    public virtual Privilege InvoicePrivilege { get; set; }
    public virtual Privilege TradePrivilege { get; set; }
}

Classe de privilèges:

public class Privilege
{
    public virtual bool Read { get; set; }
    public virtual bool Write { get; set; }
    public virtual bool Delete { get; set; }
    public virtual bool Modify { get; set; }
}

Je vais avoir un grand nombre de ces objets de privilège (une pour chaque entité en bourse) ainsi dans la base de données que j'ai les tableaux suivants:

UserAccounts ( UserID , Nom d'utilisateur)
Privilèges ( UserID, PrivilegeType , lire, écrire, modifier, supprimer)

Comment puis-je mapper la propriété de InvoicePrivielge du compte utilisateur au (UserID, « facture ») Privilège.

Je pourrais le faire en utilisant plusieurs à un, mais je ne veux pas une collection de privilèges, je préfère la carte à sa propriété.

Était-ce utile?

La solution

Je pense que d'une façon de le faire est de créer deux sous-classes de la classe Privilège:

public class InvoicePrivilege : Privilege 
{
}
public class TradePrivilege : Privilege
{
}

et définir la colonne discriminante et la valeur. Dans la cartographie couramment:

public class PrivilegeMap : ClassMap<Privilege>
{
  public PrivilegeMap()
  { 
     // ...
     DiscriminateSubClassesOnColumn("PrivilegeType")
       .SubClass<InvoicePrivilege>("Invoice", x => x.Map( ... ))
       .SubClass<TradePrivilege>("Trade", x => x.Map( ...));
  }
}

et utiliser les sous-classes dans le UserAccount

public virtual InvoicePrivilege InvoicePrivilege { get; set; }
public virtual TradePrivilege TradePrivilege { get; set; }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top