私は .NET 3.5 で Entity Framework を使用していますが、次の設計をトラバースするために Linq を作成する方法を一生理解できません。
基本的に、ユーザーが特定の EntityType に対するアクセス許可 (EntityAction) を持っているかどうかを把握しようとしています。現在、ユーザーと役割は Active Directory で維持されていますが、システムはルックアップを実行して、ユーザーが属する役割/グループを見つけることができます。
次のデータがあるとします。
エンティティ タイプ
EntityTypeId: 1
名前: 実体1
ユーザー
ユーザー ID: 1
口座名義:アンデス
役割
役割 ID: 1
アカウント名: MyRole
EntityAction
EntityActionId: 1
お名前: 何とかして
RoleEntityActionAssociation
(Role と EntityAction の関連付け)
EntityActionId: 1
役割 ID: 1
リストに(Active Directoryから)ユーザーのグループ名を保存しています:
List<string> groupNames = new List<string>();
質問
ただし、Linq を組み合わせて、ユーザー (またはリスト groupNames で割り当てられたロールの 1 つ) が EntityType を指定された特定の EntityAction に関連付けられているかどうかを調べようとしています。
// get reference to the user
User user = context.Users.Where(x => x.AccountName == "Andez").FirstOrDefault();
// get reference to the entity type we want to query
EntityType et = context.EntityTypes.Where(x => x.Name == "Entity One").FirstOrDefault();
// get list of all entity actions for the user
var result = from ea in et.EntityActions
where ea.EntityActionId == 1 && (ea.Users.Contains(user) || ea.Roles.Count(r => groupNames.Contains(r.AccountName)) > 0)
select ea;
もちろん、私のクエリは上記では機能しません - 結果は返されません (result.ToList().Count == 0)
これについての指針が必要です。
ありがとう