在权限管理中一个很重要的就是关于权限的拦截验证问题,特别是我们在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: }