Вопрос

Я создаю систему безопасности для программного обеспечения IM, создавая, и я хотел бы знать, как я могу сделать следующее в Nibernate (если вообще возможно)

Класс учетной записи пользователя:

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

У меня будет большое количество этих объектов привилегий (один для каждого торгуемого объекта), поэтому в базе данных у меня есть следующие таблицы:

Учетные записи пользователей ( Логин пользователя, Имя пользователя)
Привилегии (UserID, привилегентный спектр, Читать, писать, модифицировать, удалить)

Как я могу сопоставить свойство InvoicePrivielge с учетной записи пользователя на привилегию (usiD, 'Shoice').

Я мог бы сделать это, используя много к одному, но я не хочу набрать привилегии, я бы предпочел сопоставить его к своей собственности.

Это было полезно?

Решение

Я думаю, что способ сделать это - создать два подкласса класса привилегий:

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; }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top