У меня проблема с созданием пользовательских ролей в пользовательской реализации авторизации.
К сожалению, я имею дело с действительно плохо спроектированной устаревшей базой данных, которая используется другими приложениями, и я действительно не хочу перекодировать базу данных и другие приложения.
Ниже я перечислил, как бы я хотел, чтобы мои классы 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