ゴール:
アプリケーション全体の Web フォームのコントロールに基づいてロールにアクセス許可を割り当てるアクセス許可ページを作成しようとしています。特定のページのコントロールの文字列を作成するコードを作成しようとしています。ページ名は文字列として渡されます。
以下のこの投稿は、VB.NET の Windows フォーム アプリケーション用に書かれたものですが、私が探しているものと非常によく似ています。C# で解決策を見つけて、Web フォームに適用できることを望んでいます。 http://www.dreamincode.net/forums/topic/222439-list-of-all-controls-in-project-vbnet/
この次の投稿も私が探していたもののように見えましたが、ファイル内の検索の提案は機能しません。コードをより一般的にして、ハードコードではなくフォームにページまたはコントロールを追加するように拡張したいからです: Getアセンブリ内の各 Web フォームのコントロールのリスト
一般的なアイデア:
私の考えは、ユーザーにドロップダウンリストから役割を選択させることです。次に、ユーザーはドロップダウン リストからアプリケーション内のページを選択します。次に、SelectedIndexChanged は、選択されたページの Web フォーム クラスを照会し、そのページのコントロールの名前を一覧表示するグリッドと、割り当て可能な権限の別のドロップダウン リストを生成します。ユーザーがコントロールとアクセス許可の編集を終了したら、[保存] をクリックすると、情報がデータベースに保存されます。
フォーム認証されたユーザーがページをロードすると、ページは各コントロールのアクセス許可をデータベースに照会し、ユーザーの役割とアクセス許可に基づいて、そのコントロールに読み取り専用、編集、または非表示のいずれかのステータスが割り当てられます。私の最終的な目標は、エンド ユーザー管理者がアプリケーションの権限を管理できるようにすることです。幅広い役割と権限のセットを持ったり、顧客のニーズに基づいてカスタムの 1 回限りの作業を行う必要はありません。これは、他のページのコントロールにアクセスしようとしている唯一のページになることに注意してください。
私の場合、現在のプロジェクトには名前空間が 1 つしかないため、ASP.NET プロジェクトまたは名前空間内のすべてのコントロールを一覧表示しようとしています。現在のフォームのコントロールをリストする例はたくさん見つかりましたが、サイト全体でそれを実行できるコードは見つかりませんでした。私が持っているすべての Webform クラスを一覧表示することもできました: 名前空間内のすべてのクラスを取得する方法は?
しかし、そこに定義されているコントロールについてそのクラスにクエリを実行することはできないようです。誰かがこの問題を解決できれば、次のステップに進むことができると思います。
私が試したこと:
1 つは、Web フォーム自体をインスタンス化し、すべてのコントロールをプログラムでループすることでした。これは、少なくとも私が行っていた方法では成功しませんでした。Webform1 wf = 新しい Webform1(); また、コンストラクターとメソッドを追加して、コントロールをループしてみました。
また、Activator.CreateInstance を使用して Web フォーム クラスをインスタンス化しようとしました。このページの例に従ってみました :
例:
Page o = (Page)System.Activator.CreateInstance(Type.GetType(pageName)); foreach (Control c in o.Controls) lblMessages.Text = lblMessages.Text + c.ClientID.ToString() + "<BR>";
これもうまくいきませんでした。コンパイルはできましたが、コントロール カウントが 0 になり、もちろんコントロールがありません。
私が回避しようとしている最後の方法は、アプリケーションのページのコントロールを手動で収集し ( 本番環境では一度静的にする必要があります)、引き続きアクセス許可ページを保持し、管理者がロールにアクセス許可を割り当てる方法です。その点。
ついに:
コントロールへのアクセス許可を動的に微調整できるという正しい方向に私を向ける助けがあれば、アクセス許可を処理する別の方法を検討することが含まれていても、非常に高く評価されます。