Pergunta

Estou criando o sistema de segurança para o software que estou criando e gostaria de saber como posso fazer o seguinte no Nibernate (se possível)

Classe de conta de usuário:

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égio:

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

Eu terei um grande número desses objetos de privilégio (um para cada entidade negociada); portanto, no banco de dados, tenho as seguintes tabelas:

Contas de usuário ( ID do usuário, Nome de usuário)
Privilégios (UserID, privilegetypey, Leia, escreva, modifique, exclua)

Como posso mapear a propriedade InvoicePrivielge da conta de usuário para o privilégio (UserID, 'Fatura').

Eu poderia fazer isso usando muitos para um, mas não quero uma coleção de privilégios, prefiro mapeá-lo para sua propriedade.

Foi útil?

Solução

Eu acho que uma maneira de fazer isso é criar duas subclasses da classe de privilégios:

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

e defina a coluna e o valor do discriminador. No mapeamento fluente:

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

e use as subclasses no UserAccount

public virtual InvoicePrivilege InvoicePrivilege { get; set; }
public virtual TradePrivilege TradePrivilege { get; set; }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top