前提: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代码这样:
<location path="admins">
<system.web>
<authorization>
<!-- Order and case are important below -->
<allow roles="Administrator"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
他的意思是只有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里面判断他的角色身份再确定做什么事,这样就很方便而且很个性化拉!