モデル内のオブジェクトのセキュリティ設定をデータベースから取得しようとしています。ログインしているユーザーのセキュリティ設定に応じて、レンダリング ビューのコントロールを有効/無効/非表示にしたいと考えています。
これは私がこれまでに得たものです:
public class RestrictedObjectsViewModel
{
[SecureObject(ObjectId = 1)]
[Display(Name = "Name")]
public string Name { get; set; }
[SecureObject(ObjectId = 2)]
[Display(Name = "Address")]
public string Address { get; set; }
[SecureObject(ObjectId = 3)]
[Display(Name = "Phone Number")]
public string PhoneNumber { get; set; }
}
このアプローチを使用すると、レンダリングされるオブジェクトごとにデータベースにクエリを実行できます。モデル内のオブジェクト全体に対して一度だけデータベースにクエリを実行して、オブジェクトの権限のリストを取得することはできますか? どのように設定しますか?
アップデート:
わかりました、少し詳しく説明しましょう。
次の属性をオブジェクトに設定するコードで、レンダリングされたオブジェクトの関連するテーブル行を非表示にするように HTML をプログラムしました。
[SecureObject(IsInvisible = true)]
上記のコードは、私のテストでは正しく動作します。ただし、次のことをしようとすると:
public class RestrictedObjectsViewModel
{
[SecureObject(IsInvisible = ObjectId3Invisible)]
[Display(Name = "Phone Number")]
public string PhoneNumber { get; set; }
public RestrictedObjectsViewModel(bool setPermissions = false)
{
if (setPermissions)
{
ObjectId3Invisible = true;
}
}
public bool ObjectId3Invisible = false;
}
「非静的フィールド、メソッド、またはプロパティ 'MyProject.Models.RestrictedObjectsViewModel.ObjectId3Invisible' にはオブジェクト参照が必要です」というエラー メッセージが表示されます。
コントローラーは次のとおりです。
public ActionResult RestrictedObjects()
{
return View(new Models.RestrictedObjectsViewModel(true));
}
を静的に変更するObjectId3Invisible
と、実行時に値を true または false に変更できなくなります。
助言がありますか?