0

モデル内のオブジェクトのセキュリティ設定をデータベースから取得しようとしています。ログインしているユーザーのセキュリティ設定に応じて、レンダリング ビューのコントロールを有効/無効/非表示にしたいと考えています。

これは私がこれまでに得たものです:

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 に変更できなくなります。

助言がありますか?

4

0 に答える 0