protected void btnLogin_Click(object sender, EventArgs e)
    {
        User u = new User();
        u.Account = txtName.Text;
        User user = UserManager.FindByAccount(txtName.Text);
        if (user == null)
        {
            labText.Text = "无此账号";
            return;
        }
        if (user.Password != MyMD5.MDString(txtPwd.Text))
        {
            labText.Text = "密码错误";
            return;
        }
        if (user.Password == MyMD5.MDString(txtPwd.Text))
        {
            FormsAuthentication.RedirectFromLoginPage(user.Account, true);
        }
    }
这个是我的登录方式,登录成功后,将根据权限表读取该用户对某功能的浏览,添加,删除,修改权限,请问这个应该用什么方法读取?读取成功后是放在session里面吗?因为我考虑到如果在login的时候读取,因为登录方式是cookies保存登录信息,重新打开网页的时候不用重复登录,这个时候session就没有读取到了。
如果在每个页面里面都判断
if(Session["power"]==null){
  Session["power"]= PowerManager.getPower();
}
是不是太复杂?还有种方法是在每一步操作的时候,都查询一次权限表,看看该用户有没有这个权限做改动作?
这样是不是更繁琐了?请问大家是怎么做的?

解决方案 »

  1.   

    以下是我针对这类问题的一点看法:
    1.登入的时候把用户信息保存进Session["UserInfo"],用户名和加了密的密码保存到随项目周期失效的Cookies中;
    2.建立一个名为PageBase的类,主要重写Page类,在此类中判断Session["UserInfo"]是否失效,如果失效可以用保存了帐号密码的Cookies再读取一遍数据库,填充Session["UserInfo"],使得用户未退出程序时长期在线
    3.每个页面类名是不同的,同样在PageBase中根据用户ID和通过反射获取的当前类名得出用户针对该页面有些什么权限(新增,修改,删除,查看个人记录,查看部门记录,查看公司记录……)这个和你的后台权限有关。
    4.项目中所有需要判断权限的界面都继承PageBase类。