0

我在自定义授权实现中创建用户角色时遇到问题。不幸的是,我正在处理一个设计非常糟糕的遗留数据库,它被其他应用程序使用,我真的不想重新编码数据库和其他应用程序。

下面我列出了我希望我的 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) 
}

在 Perms4Sites 中:

  • SiteCode 与管理区域正在管理的站点之一相关。
  • 部分是管理员不同部分的 1 个字符代码(与角色相关)
  • AccessLevel 0-3 取决于一个人对该部分有多少权限(即读、写、发布)。目前我们不需要知道 soemone 有什么级别的访问权限——只要他们有 0 以外的任何东西。

我想将所有权限类型表(以及 People 表中的行)的映射添加到一个 UserPermissionGroup 类中。我只需要阅读这些表 - 不需要写入数据库。

有谁知道如何将此数据库结构的映射写成更有用的东西,比如我上面的理想类模式?

感谢您的帮助

4

1 回答 1

0

我的一位同事指出我这样做太复杂了,我应该为所有映射编写一个 sql 视图。

于 2011-02-21T13:16:51.497 回答