0

我正在为我正在创建的软件创建安全系统,我想知道如何在 NHibernate 中执行以下操作(如果可能的话)

用户帐户类:

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

特权等级:

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

我将拥有大量这些特权对象(每个交易实体一个),因此在数据库中我有以下表格:

UserAccounts ( UserID , Username)
权限 ( UserID, PrivilegeType , Read,Write,Modify,Delete)

如何将 InvoicePrivielge 属性从用户帐户映射到 (UserID, 'Invoice') 权限。

我可以使用多对一来做到这一点,但我不想要特权集合,我宁愿将它映射到它的属性。

4

1 回答 1

2

我认为一种方法是创建 Privilege 类的两个子类:

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

并设置鉴别器列和值。在流畅的映射中:

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

并使用中的子类UserAccount

public virtual InvoicePrivilege InvoicePrivilege { get; set; }
public virtual TradePrivilege TradePrivilege { get; set; }
于 2010-05-13T16:17:21.440 回答