天天看点

forms角色验证,以普通用户身份登陆管理页面先弹出警告信息窗口

前提:forms验证角色.

a.aspx:普通用户角色许可页面

b.aspx:管理员角色许可页面

一普通用户登陆到a.aspx,而a.aspx里面有个连接进入b.aspx,如果此用户点了这个连接想进入

b.aspx,

但是因为这个用户不是管理员角色,所以系统就会把他导向到login.aspx

我希望的在导向到login.aspx的前面弹出个信息框啊,说明他所在的用户组没有这个权限要他

先登陆,或者弹出信息框后不导向到login.aspx,而是直接history.back();

不知道可以实现么?

应该怎么样实现

恳请高人能够指点下!!

刚刚就这个问题和快乐,tp,jyk,yiyanxiyin,那个头。。。。等朋友在群里讨论,他们提出这样解决,在web.config里面把loginUrl设置成一个中间页面c.htm,里面就只有弹出信息窗口的脚本和导向到login.aspx的脚本,这个方法很好,但是我想有点麻烦而且不个性化,因为这样无论用户是不是登陆了都会这样,不好,吃饭的时候我想了下,得到另外种解决办法,如下:

首先修改web.config:

<location path="admins">

<system.web>

<authorization>

<!-- Order and case are important below -->

<deny users="?"/>

</authorization>

</system.web>

</location>

他的意思是在admins下面的文件拒绝匿名用户访问,也就是说你只要是个登陆了的用户都可以访问,不管你是什么角色都可以,这样的话我们就可以在b.aspx的page-load里面来判断角色进行操作了

为什么以前不能够这样呢?因为我以前的web.config代码这样:

<allow roles="Administrator"/>

<deny users="*"/>

他的意思是只有Administrator角色才能够访问admins目录下的文件,于是其他的用户角色一访问这里的页面他首先根本就不会执行b页面里的page_load事件而是直接跑大login.aspx里面去拉

下面再写adminis目录下的b.aspx里面的代码如下,是后台文件代码

private void Page_Load(object sender, System.EventArgs e)

  {

   // 在此处放置用户代码以初始化页面

   if(!IsPostBack)

   {

    if(!HttpContext.Current.User.IsInRole("Administrator"))

    {

     //Response.End();

       //Page.RegisterStartupScript("","<script>alert('你没有这个权限!');history.back();</script>");

        Response.Write("<script>alert('美女,你没有这个权限啊!');history.back();</script>");

     Response.End();

    }

   }

  }

呵呵,这样的话在b里面判断他的角色身份再确定做什么事,这样就很方便而且很个性化拉!

(请您对文章做出评价)

继续阅读