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

不要将代码放在识别继承它的类的基础中。添加一个孩子必须重写的抽象属性。在基地:

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

最简单的方法是查看表单身份验证,因为它将通过配置文件为您处理所有这些。网上有很多关于这方面的好文章——这里有一篇:

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 回答