回make1111,如果这样的话,当一个用户正在输入数据的时候,突然这样

解决方案 »

  1.   

    反正客户每次操作都要回送表单
    客户的权限还是在每次提交请求的时候在服务器端判断比较好
    这样管理员更新权限之后,客户的第一次回送表单,新的权限就能生效
    如果放到session里面,只要session不过期,客户始终拥有相同的权限
    这样设计我觉得不是很科学我觉得可以设计一个身份校验的基类,由需要身份校验的页面来继承
    在这个基类里面进行身份校验
    把每个页面,或者几个页面组成的小功能模块都加上表单号码
    身份验证类接受表单号码进行校验
    这样,页面现实的时候,校验已经完成
    如果没有权限,直接到航道错误页面
    个人意见,仅供参考
      

  2.   

    在Global.asax中的Application_AuthenticateRequest事件处理器中创建用户对象,实际上你可以创建一个Principal对象(或者实现了IPrincipal接口的对象),然后把这个对象指定给aps.net内建的user属性即可。也就是说如果有页面需要权限,那么这个事件就会激活,然后从数据库读取有关信息,刷新User属性。User属性本身就是IPincipal接口的对象。
      

  3.   

    尊敬的niwalker:
       能不能贴一点代码给小弟看一下。
      

  4.   

    复杂了,一般来说管理员修改某个用户的权限是由用户提出的,即使用户不知道这个事情,程序中完全可以加上强制重新登陆的验证,即如果该用户权限被修改后将一个标志位置位,用户在继续操作时进行强制验证。
    另外Session最好只存储UserName,然后在一套权限表中通过Session的UserName进行验证
      

  5.   

    以下是Grobal.asax中的代码,这里使用的是GenericPrincipal的对象,你可以从IPrincipal接口派生你自己的Principal来代替这个GenericPrincipal:protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
         if(Context.Request.IsAuthenticated)
         {
    String[] Roles={"Role1","Role2","Role3"}; //可以从数据库中提取

    Context.User=new GenericPrincipal(Context.User.Identity,Roles);
         }
    }你再也不需要在每个需要授权的页面去写权限验证了(就象楼上说的什么Session),你要做的一件事情就是在Web.config文件中设置每个页面允许访问的角色,至于如何设置,参见有关基于Forms角色验证的资料。
    以上的代码是你要求的"一点点代码",希望对你有帮助。