2

いくつかのグリッドと 7 つのコントロールを持つ小さなフォームを含むページがあります。グリッドには補助データが表示されます。全体として、さまざまなイベントを処理する約 320 行のコード ビハインドがあります。このページへのアクセス権を持つ他のすべての役割はそれらすべてを編集できるのに対し、1 つの特定の役割は 7 つのフィールドのうち 3 つのフィールドのみを編集する必要があるという要件があります。

今私の質問に。通常、ロールベースのセキュリティをページ レベルに制限するアプローチを採用しています。.Net でセキュリティを完全に設定できるようになるからです。しかし、この場合、この要件のために例外を作成しようとしています。これは、パターンのない新しい領域です。3 つのコントロールのみにアクセスできるロール用の別のページを作成するために必要なコードの複製の量により、これはオプションではありません。一部のものをユーザー コントロールに入れても、これは不当な量の作業のようです。とりあえず。

私が最初に考えたのは、現在のユーザーがアクセスできない page_load イベントのすべてのコントロールを無効にすることでしたが、それは見苦しく感じました。これを行うより良い方法はありますか?

4

3 に答える 3

2

保護するコントロールタイプをサブクラス化し、OnLoadイベントでユーザーに編集を許可するかどうかを決定できます。

public class ProtectedTextBox : TextBox
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        bool hasAccess = CurrentUserHasAccess(); // TODO
        if (hasAccess)
        {
            Enabled = true;
        }
        else
        {
            Enabled = false;
        }
    }
}

次に、web.configのコントロールにプレフィックスを割り当てます。

<pages>
    <controls>
        <add tagPrefix="me" Namespace="YourNamespace" assembly="YourAssembly" />
    </controls>
</pages>

最後に、許可されていないユーザーによる変更を防ぎたいフィールドに対して、通常のTextBoxの代わりにページで使用します。

<me:ProtectedTextBox runat="server" <!-- etc. -->>

ボタンだけでなく、必要な他のコントロールタイプについても同じようにします。

于 2010-02-17T17:41:08.820 に答える
0

セキュリティによって影響を受けるコントロールが別のパネルにあるようにコントロールを配置してから、セキュリティに基づいてパネルを非表示にすることはできますか?

于 2009-12-20T05:05:56.060 に答える
0

同じコード ビハインド ファイルから継承する別のフォームを作成した場合はどうなるでしょうか。そうすれば、別の見方ができ、コードの重複を防ぐことができるのではないでしょうか?

于 2009-12-20T04:24:10.890 に答える