我在自定义授权实现中创建用户角色时遇到问题。不幸的是,我正在处理一个设计非常糟糕的遗留数据库,它被其他应用程序使用,我真的不想重新编码数据库和其他应用程序。
下面我列出了我希望我的 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 类中。我只需要阅读这些表 - 不需要写入数据库。
有谁知道如何将此数据库结构的映射写成更有用的东西,比如我上面的理想类模式?
感谢您的帮助