Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理每个页面上的自定义安全性?_C#_Asp.net_Security_Webforms - Fatal编程技术网

C# 如何处理每个页面上的自定义安全性?

C# 如何处理每个页面上的自定义安全性?,c#,asp.net,security,webforms,C#,Asp.net,Security,Webforms,这听起来可能是个愚蠢的问题,但我即将为一个新站点实现一个定制的安全数据库和框架。我想知道如何最好地处理这件事 注意:我没有为此使用ASP.NET成员资格,我使用的是自定义数据库和所有自定义内容,用于用户管理 将有几个级别的安全性,所以我在这方面有点困惑,但没有使它变得太困难。到目前为止,我唯一能想到的是检查页面加载中的每个页面是否具有正确的安全性: protected void Page_Load(object sender, EventArgs e) { CustomUser use

这听起来可能是个愚蠢的问题,但我即将为一个新站点实现一个定制的安全数据库和框架。我想知道如何最好地处理这件事

注意:我没有为此使用ASP.NET成员资格,我使用的是自定义数据库和所有自定义内容,用于用户管理

将有几个级别的安全性,所以我在这方面有点困惑,但没有使它变得太困难。到目前为止,我唯一能想到的是检查页面加载中的每个页面是否具有正确的安全性:

protected void Page_Load(object sender, EventArgs e)
{
     CustomUser user = Session["User"] as CustomUser;
     if(user != null && user.CanAccessFeature("TopicModeration"))
     {
          //initialize page elements
     }
     else 
     {
          Response.Redirect("Default.aspx?featureDenied=TopicModeration", false);
          Context.ApplicationInstance.CompleteRequest();
     }
}
这很好,但如果我有几十个页面有不同的限制,它可能会有点重复。有人对此有什么想法吗?我应该为每个安全功能从System.Web.Page继承,并在页面上使用它吗


谢谢

我可以建议以下方法吗:

创建自定义控制器类,如下所示:

public class CustomController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        CustomUser user = Session["User"] as CustomUser;
        if(user != null && user.CanAccessFeature("TopicModeration"))
        {
            base.OnActionExecuting(filterContext);
        }
        else
        {
            filterContext.Result = new RedirectResult("Default.aspx?featureDenied=TopicModeration", false);
            Context.ApplicationInstance.CompleteRequest();
        }
    }
}

然后,您可以在希望该检查从此控制器继承的位置使用控制器。

您可以创建一个基类,并使所有母版页或页面继承该类

下面是母版页继承类的示例

为所有要继承的母版页初始化

public class PageBase: System.Web.UI.MasterPage
{       
   protected override void OnLoad(EventArgs e)
   {
       //Put your security code here...
       base.OnLoad(e);
   }  
}
这是一个母版页,继承了上面的类

public partial class Site1ColMaster : MySite.PageBase
{
    protected void Page_Load(object sender, EventArgs e)
    {
      //Master page
    }
}

你在使用母版页吗?如果是,请在母版页中加载身份验证event@TheShaman我对所有页面都使用标准母版页,但正如我所说的,有许多安全特性。我是否应该为每个安全功能创建一个母版页并在那里检查它?我认为这在很大程度上取决于那些角色或组/级别,即您所称的功能-即使您不使用成员资格,这些概念也有望应用到您的实现中。有点像:@EdSF如果用户不能使用页面所需的功能,那么该用户将需要重定向到标准页面。在这种情况下,我应该为每个特性创建一个BasePage类吗?如ModerationPage、AdministrationPage等?如果您能够以符合您的实现的逻辑方式对它们进行分组,那么分组的结果是肯定的。如果它们真的是独一无二的,那么就有点不相关了-我怀疑这种情况是否会发生,例如,管理员页面访问权被授予管理员角色,该角色可能会继承大部分(如果不是全部的话)较小的角色-继承用户、版主等…我使用的是webforms,这是可行的还是只适用于ASP.NET MVC?我真的很抱歉,但我不知道如何在web表单中实现这一点。我知道你可以将MVC和WEB表单混合使用,但我不知道。那么我需要为每个安全特性创建一个基类吗?类似于:TopicModeration、TopicAdministration、PostAdministration、PostModeration、Chat、Downloads等的基类。。。?