Свободное отображение nHibernate из трех таблиц в один класс - PullRequest
0 голосов
/ 21 февраля 2011

У меня проблема с созданием пользовательских ролей в пользовательской реализации авторизации. К сожалению, я имею дело с действительно плохо спроектированной устаревшей базой данных, которая используется другими приложениями, и я действительно не хочу перекодировать базу данных и другие приложения.

Ниже я перечислил, как бы я хотел, чтобы мои классы User и UserPermissionGroup выглядели.

public class User
{
  public virtual int Id { get; set; }
  public virtual int Name { get; set; }
  public virtual int Email { get; set; }
  public virtual int Password { get; set; }

  protected virtual IEnumerable<UserPermissionGroup> PermissionGroups { get; set; }

  public virtual book IsInRole(string role)
  {
    // code to check with PermissionGroups if user is in one of the required roles
  }
}

public class UserPermissionGroup
{
  public virtual string Role { get; set; }
  public virtual bool CanAccess { get; set; }
  public virtual string SiteCode { get; set; } // optional field - depends on perm type in DB
}

И, к сожалению, моя (сокращенно) структура базы данных выглядит так:

People
{
  ID (PK, int)
  Name (varchar)
  Email (varchar)
  Password (varchar)

  PeopleTypeId (FK, int)
  IsSuperAdmin (bit)
  IsSiteAdmin (bit)
  IsUserAdmin (bit)
}

PeopleTypes
{
  PeopleTypeId (PK, int)
  TypeName (varchar)
}

Perm2People
{
  PeopleId (PK, FK, int)
  GroupID (PK, FK, int)
}

PermGroups
{
  GroupID (PK, int)
  GroupName (varchar)
}


Perms4Sites
{
  PeopleID (PK, FK, int)
  SiteCode (PK, FK, char(3))
  Section (PK, char(1))
  AccessLevel (int) 
}

На сайтах Perms4:

  • SiteCode относится к одному из сайтов, которым управляет область администратора.
  • Раздел представляет собой 1-символьный код для различных частей администратора (который относится к ролям)
  • AccessLevel 0-3 в зависимости от того, сколько прав у человека есть к этому разделу (т. Е. Чтение, запись, публикация). На данный момент нам не нужно знать, какой уровень доступа у соемона - только если у них есть что-то кроме 0.

Я хотел бы добавить сопоставления для всех таблиц типов разрешений (и строк из таблицы People) в один класс UserPermissionGroup. Мне нужно только прочитать эти таблицы - запись в БД не требуется.

Кто-нибудь знает, как записать отображение для этой структуры БД во что-то более полезное, как моя схема идеального класса выше?

Спасибо за любую помощь Saan

1 Ответ

0 голосов
/ 21 февраля 2011

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

...