Pregunta

Estoy creando el sistema de seguridad para el software de creación de im y me gustaría saber cómo puedo hacer el siguiente en NHibernate (si es posible)

Clase Cuenta

Usuario:

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; }
}

Clase de privilegio:

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; }
}

Me va a tener un gran número de estos objetos de privilegio (uno para cada entidad negociado) por lo que en la base de datos que tengo las siguientes tablas:

UserAccounts ( ID de usuario , nombre de usuario)
Privilegios ( ID de usuario, PrivilegeType , leer, escribir, modificar, borrar)

¿Cómo puedo asignar la propiedad InvoicePrivielge de la cuenta de usuario al (ID de usuario, 'Factura') de privilegios.

Yo podría hacer esto utilizando muchos-a-uno, pero no quiero una colección de privilegios, estaría bastante mapa a su propiedad.

¿Fue útil?

Solución

Creo que una manera de hacer esto es crear dos subclases de la clase de privilegios:

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

y establecer la columna y el valor del discriminador. En cartografía fluidez:

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

y utilizar las subclases en el UserAccount

public virtual InvoicePrivilege InvoicePrivilege { get; set; }
public virtual TradePrivilege TradePrivilege { get; set; }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top