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つに関連しています。
  • セクションは、管理者のさまざまな部分(役割に関連する)の​​1文字のコードです。
  • AccessLevel 0〜3は、そのセクションに対するユーザーのアクセス許可(つまり、読み取り、書き込み、公開)に応じて異なります。現時点では、soemoneのアクセスレベルを知る必要はありません。0以外のものがある場合でも同様です。

すべてのパーミッションタイプテーブル(およびPeopleテーブルの行)のマッピングを1つのUserPermissionGroupクラスに追加したいと思います。これらのテーブルを読み取るだけでよく、DBへの書き込みは必要ありません。

このDB構造のマッピングを、上記の理想的なクラススキーマのようなもっと便利なものに書き込む方法を知っている人はいますか?

助けてくれてありがとうサーン

4

1 に答える 1

0

私の同僚は、私がこの方法を複雑にしすぎていることを指摘しました。すべてのマッピングのSQLビューを作成する必要があります。

于 2011-02-21T13:16:51.497 に答える