1

管理画面に次のロジックがあります。ログ画面にも同様のロジックが必要です。したがって、このロジックをベース ページに移動する予定です。base pageで、現在のページをどのように認識するのですか? (管理画面とログ画面の見分け方は?)

ページに基づいて、構成から取得される値は異なります。

これを達成するためのさまざまな方法は何ですか?これらのアプローチから抜け出す最善の方法は何ですか?

        //Admin Screen
        List<string> authorizedRoles = new List<string>((ConfigurationManager.AppSettings["AdminScreenRoles"]).Split(','))
        if (!authorizedRoles.Contains(userRole))
        {
            Response.Redirect("UnauthorizedPage.aspx");
        }

    //Logs Screen   
        List<string> authorizedRoles = new List<string>((ConfigurationManager.AppSettings["LogsScreenRoles"]).Split(','))
        if (!authorizedRoles.Contains(userRole))
        {
            Response.Redirect("UnauthorizedPage.aspx");
        }
4

2 に答える 2

2

それを継承するクラスを認識するコードを base に置かないでください。子がオーバーライドする必要がある抽象プロパティを追加します。ベースで:

public abstract string AppSettingsRolesName { get; }

List<string> authorizedRoles = new List<string>((ConfigurationManager.AppSettings[AppSettingsRolesName]).Split(','))
if (!authorizedRoles.Contains(userRole))
{
    Response.Redirect("UnauthorizedPage.aspx");
}

ログ:

public override string AppSettingsRolesName 
{
   get { return "LogsScreenRoles"; }
}

管理者:

public override string AppSettingsRolesName 
{
   get { return "AdminScreenRoles"; }
}
于 2012-08-01T07:36:08.570 に答える
0

最も簡単な方法は、フォーム認証を調べることです。これは、構成ファイルを介してこれらすべてを処理するためです。これにはウェブの周りに点在する良い記事がたくさんあります-ここに1つあります:

http://ondotnet.com/pub/a/dotnet/2003/01/06/formsauthp1.html

ただし、簡単な修正を探している場合、最も簡単な方法は、前述のようにコードをベースページに移動し、インターフェイスプロパティを使用して、継承されたページに使用するロールタイプを示すようにすることです。 :

public abstract class BasePage : Page
{
    protected abstract string AuthorisedRoles { get; }

    protected override void  OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        List<string> authorizedRoles = new List<string>((ConfigurationManager.AppSettings[this.AuthorisedRoles]).Split(','));
        if (!authorizedRoles.Contains(userRole))
        {
            Response.Redirect("UnauthorizedPage.aspx");
        }
    }
}

public class LogsPage : BasePage
{
    protected override string AuthorisedRoles
    {
        get { return "LogsScreenRoles"; }
    }
}

public class AdminPagePage : BasePage
{
    protected override string AuthorisedRoles
    {
        get { return "AdminScreenRoles"; }
    }
}

しかし、真剣に、適切に実行したい場合は、フォーム認証を調べてください。最初に見たときほど複雑ではありません。

于 2012-08-01T07:43:19.123 に答える