0

実装しようとしているアーキテクチャに関するアドバイスと支援を探しています。私が構築しているアプリケーションは、内部で使用する複数の ASP.NET Web サイトに SSO と中央認証を提供します。私が直面している問題は、意味のあるエンティティ フレームワークでデータを構造化する方法が思いつかないことです。

概要: 1) アカウントは多くのアプリケーションに関連付けることができます 2) ロールは各アプリケーションに固有です 3) 機能は各アプリケーションに固有です 4) 以下には示されていませんが、関連付けをさらに分解してアカウントをメンバーにしたいと思います「ディレクトリ」とアプリケーションは、アプリケーションに関連付けられたディレクトリのリスト内のユーザーにアクセスできます (これは理にかなっていますか?) ユーザー「Joe」には、次のような権限があります。

Application 1:  

Role    | Feature 1 | Feature 2 | Feature 3
=============================================
Role1   |     x     |           |     x
Role2   |           |     x     |     x
Role3   |     x     |     x     |     x

Application 2:
Role    | Feature 1 | Feature 2 | Feature 3
=============================================
Role1   |           |           |     x
Role2   |           |     x     |     
Role3   |     x     |     x     |     x

これらのアクセス許可には、次のような API を介してアクセスします。

CheckAccountPermission(Role, Feature), IsAccountInRole(Role)

現在、次のモデルを試しています。

Application.cs
public int ApplicationId { get; set; }
public Guid ApplicationGuid { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsEnabled { get; set; }
public DateTime DateCreated { get; set; }
public DateTime? LastModified { get; set; }
public virtual ICollection<Directory> Directories { get; set; }
public virtual ICollection<Feature> Features { get; set; }
public virtual ICollection<AccountPermission> AccountPermissions { get; set; } 


Account.cs
public int AccountId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string PasswordSalt { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
public string AvatarUrl { get; set; }
public string AccountNotes { get; set; }
public DateTime? LastLogin { get; set; }
public DateTime DateCreated { get; set; }
public DateTime? LastModified { get; set; }
public DateTime? LastActivity { get; set; }
public bool IsEnabled { get; set; }
//-------------------//
public int DirectoryId { get; set; }
public virtual Directory Directory { get; set; }            
public virtual ICollection<Session> Sessions { get; set; }
public virtual ICollection<AccountPermission> AccountPermissions { get; set; } 

Directory.cs
public string Name { get; set; }
public string Description { get; set; }
public bool IsEnabled { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<Application> Applications { get; set; } 

Role.cs
public int RoleId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int? PrimaryRoleId { get; set; }
public Role PrimaryRole { get; set; }
public DateTime DateCreated { get; set; }
public DateTime? LastModified { get; set; }
public virtual int DirectoryId { get; set; }
public virtual Directory Directory { get; set; }
public virtual ICollection<AccountPermission> AccountPermissions { get; set; } 

AccountPermission.cs
[Key, Column(Order = 0)]
public int AccountId { get; set; }
public virtual Account Account { get; set; }
[Key, Column(Order = 1)]
public int RoleId { get; set; }
public virtual Role Role { get; set; }
[Key, Column(Order = 2)]
public int FeatureId { get; set; }
public virtual Feature Feature { get; set; }
[Key, Column(Order = 3)]
public int ApplicationId { get; set; }
public virtual Application Application { get; set; }

ここで私がベースから外れていたり、道に迷ったりしている場合は、お気軽に正しい方向に向けてください。私は本当にこれを正しくしたいです。私が提供できる明確な情報があれば、お知らせください!みんな、ありがとう!

4

0 に答える 0