在 web.config 中配置了用户登录为form验证,并且启用了 roleManage,现在未登录的用户都会自动跳转至登录页才能访问页面,现在的问题是:
权限不足的用户访问特定页面(即不在用户Roles中的页面被用户访问),程序也自动跳转至登录页面了。现在仅仅希望用户得到一个提示页面,告诉他无权访问而已,如何做?需要用哪个全局事件吗?还是在web.config中配置什么?还是修改我的login页面?

解决方案 »

  1.   

    if (是否Ajax提交方式)
                    {
                        Response.Redirect(url, true);
                    }
                    else
                    {
                        Server.Transfer(url);
                    }
    在页面的Page_load中做判断。没有权限就跳转
      

  2.   

    1楼的方法我也知道。现在不是通过 page_load 的方法来判断权限的,而是使用 web.config里面的配置来完成的,辅助全局的事件来处理。实现该功能的前提是保持这种权限验证的模式。
      

  3.   

    <authorization>
    <allow users="*">
    <deny users="allwin\tess,allwin\king">
    <deny users="?">
    </authorization>
    这种配置应该是除了tess和king都可以访问.
    匿名不允许访问.
      

  4.   

    过滤器是什么?我用的是VS2005的版本。你的意思是说要在 LoginUrl 的页面里去判断了?
      

  5.   

    算了,你还是用session吧,这东西对你来说太深了
      

  6.   

    这个倒是个好方法。在里面判断用户Session是否存在,是则跳转到错误页面,否就停留当前登录页面
      

  7.   

    也可以在Httphander中去实现,不过还是需要进行权限判断,既然RoseManager已经判断过了才跳转的,那在HttpHandler中再判断就显得多此一举了,对项目的修改还是用7楼的方法更方便。
      

  8.   

    还是写多个Filter吧!这样可能好解决一些.
      

  9.   

    不懂 Filter 是什么?能解释一下吗?
      

  10.   


    说的原来是MVC模式下的 ActionFilter,我用的是 WebForm,不是MVC。
      

  11.   

    login页面中提示不就行了,提示加登陆表单。
      

  12.   

    我是自己写了权限判断方法,具体方法实现比较长,我只帖了方法的思路。如果对这具体实现感兴趣,可以吧项目发给你。
    主要是先判断是否登录,没登陆则转登陆页,登陆但没权限则给出提示:BASEPAGE里:
    //是否有权限
    public void Authorized(string permissionItemCode)
        {
            // 若没有相应的权限,那就跳转到没有权限的页面里
            if (!LoginUtilities.UserIsLogin() || !IsAuthorized(permissionItemCode))
            {
                bool y = IsAuthorized(permissionItemCode);
                HttpContext.Current.Response.Redirect(Utilities.AccessDenyPage + "?Code=" + permissionItemCode);
            }
        }
    该页面LOAD中:
    //判断是否登录,这个方法里来实现没登录转登录页。
    Utilities.CheckIsLogin();
    // 判断是否有这个页面权限权限
    this.Authorized("Project.Admin");
      

  13.   

    修改login页面,在Page_Load中加上:
    if (Page.User.Identity.Name != "")
    {
    Response.Write("无权访问");
    Response.End();
    }
      

  14.   


    这个不是用自己的代码来处理的吗?不是要这个的。估计只有从login页面来处理了。
      

  15.   

    BASEPAGE里:意思是页面的基页面,其他页面都继承它
    如果不想继承,那就把BASEPAGE的代码复制到你的工作页,即有权限则显示,没权限则提示无权访问你要先判断是否登录,没有登录就跳到登录页
    已登录,就判断是否有权限显示
    所以我的方法是在LOAD里写了2个方法://判断是否登录,这个方法里来实现没登录转登录页。
    Utilities.CheckIsLogin();
    // 判断是否有这个页面权限权限,
    this.Authorized("Project.Admin");
    //无权限则跳到无权限页
    HttpContext.Current.Response.Redirect(无权限页的URL)