一步一步Asp.Net MVC系列_权限管理之权限控制(上

在权限管理中一个很重要的就是关于权限的拦截验证问题,特别是我们在webform中的验证,比纯winform要更复杂,winform可 以通过验证把按钮隐藏或者禁用的方式,但是在web中我们不能仅仅通过隐藏按钮,不显示菜单/按钮之类的手段,因为客户端的代码都是透明的,如果我们不在 服务端把好关,那么权限根本就无从谈起,我们必须彻底的进行验证,每一步动作都要进行验证,客户端的每一个ajax提交都要进行验证,如果任何一个 ajax 动作都做过验证了,那么至少可以保证基本的安全性了.
在纯webform中,我们通常怎么来进行权限控制呢?

一般情况下,设计基类然后,在基类写好验证方法,子类调用并验证

我们来看看启航动力的开源CMS怎么进行的验证:
  1:  using System;
  2:  using System.Collections.Generic;
  3:  using System.Text;
  4:  using System.Web;
  5:  using System.Web.UI.WebControls;
  6:  using DTcms.Common;
  7:  
  8:  namespace DTcms.Web.UI
  9:  {
 10:      public class ManagePage : System.Web.UI.Page
 11:      {
 12:          protected internal Model.siteconfig siteConfig;
 13:  
 14:          public ManagePage()
 15:          {
 16:              this.Load += new EventHandler(ManagePage_Load);
 17:              siteConfig = new BLL.siteconfig().loadConfig(Utils.GetXmlMapPath("Configpath"));
 18:          }
 19:  
 20:          private void ManagePage_Load(object sender, EventArgs e)
 21:          {
 22:              //判断管理员是否登录
 23:              if (!IsAdminLogin())
 24:              {
 25:                  Response.Write("<script>parent.location.href='" + siteConfig.webpath + siteConfig.webmanagepath + "/login.aspx'</script>");
 26:                  Response.End();
 27:              }
 28:          }
 29:  
 30:          #region 管理员============================================
 31:          /// <summary>
 32:          /// 判断管理员是否已经登录(解决Session超时问题)
 33:          /// </summary>
 34:          public bool IsAdminLogin()
 35:          {
 36:              //如果Session为Null
 37:              if (Session[DTKeys.SESSION_ADMIN_INFO] != null)
 38:              {
 39:                  return true;
 40:              }
 41:              else
 42:              {
 43:                  //检查Cookies
 44:                  string adminname = Utils.GetCookie("AdminName", "DTcms"); //解密用户名
 45:                  string adminpwd = Utils.GetCookie("AdminPwd", "DTcms");
 46:                  if (adminname != "" && adminpwd != "")
 47:                  {
 48:                      BLL.manager bll = new BLL.manager();
 49:                      Model.manager model = bll.GetModel(adminname, adminpwd);
 50:                      if (model != null)
 51:                      {
 52:                          Session[DTKeys.SESSION_ADMIN_INFO] = model;
 53:                          return true;
 54:                      }