asp.net权限控制的方式
我们在使用asp.net开发Web程序的时候经常需要进行一些权限控制,如:
限制用户没有登陆就无法查看一些页面,又或者是说登陆之后如果不是管理员,或是没有响应的权限就无法进行相关的操作。
实现的方法有很多,最简单也是最笨的方式就是在每个需要权限控制的页面都写一段代码来进行逻辑判断,
在高级一点就是将这些个代码抽象出来形成一个方法,需要使用时调用即可。
之前的之前,我也是用上面的方法来做权限控制的(= =我很菜),不过自从某一天学习到了一个吊炸天的方式之后,哈哈,从此变身高(土)富(掉)帅(渣)。
废话不说,马上开始:
首先,需要定义一个类,叫什么都行,我的就叫BasePage吧
public class BasePage : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (Session["User"] == null)
{
HttpContext context = HttpContext.Current;
context.Response.Redirect("Login.aspx?url=" + context.Request.Url.ToString());
}
}
}
BasePage类必须继承 System.Web.UI.Page
然后再其中重写Page类的OnInit方法,在其中先执行Page基类自己的OnInit(),之后加入自己的权限控制代码
那么,为什么要这么做呢?
由上面的代码我们可以看到,由于BasePage继承了Page类,而据我们所知,Page类是所有的aspx的基类,也就是说,当你请求一个aspx页面的时候,该页面会经过一个完整的生命周期(简单的可以理解成,从开始创建到结束销毁,真正的生命周期过程十分复杂),在生命周期中,都会先执行Page类的OnInit方法。
说白了就是,不管你怎么搞,Page类的这个OnInit方法一定会被执行。
那么,在我们的BasePage类中,继承了Page类并重写OnInit方法有什么用呢?
这时候你想想,如果让一个aspx页面不在直接继承于Page类,而是我们自己定义的BasePage类,会出现什么情况??
------------------无耻的分割线--------------------
答案很明显:aspx页面继承于BasePage,也相当于继承了Page类,是Page类的孙子类(不明白的打道回府看书去~)
而这个时候Page类的OnInit方法被BasePage类重写了!
所以当aspx生命周期到要执行Pge类的OnInit方法的时候,会执行这个重写的方法。
而在这个重写的方法中,又调用了Page类的OnInit方法,保证了原来的页面生命周期不会出现异常,
而在执行完Page类的OnInit方法之后,重点来了
生命周期会继续执行我们自己写的权限控制的代码,执行完毕之后才回去进行生命周期中的另外过程。
这就实现了,只要aspx页面继承了BasePage,任何请求都会经过一系列的自定义的权限判断。
是不是很吊!!!(当然或许是我土,不知道= =)
当然,权限控制的代码有可能很复杂,上面只是一个简单的例子,仅供参考。
例子的功能是,检查Session中User是否为空,空表示没有登录,跳转到登陆页面,并将原来用户浏览的页面url当做参数传给登陆页面,以便用户登录之后可以继续浏览刚刚的页面(这个功能我觉得不错哟~)
最后,关于页面的生命周期,很复杂,有时间会整理一些自己的理解上来,to be continue...
asp.net权限控制的方式的更多相关文章
- WPF应用中一种比较完美的权限控制设计方式
如题近段时间 需要在wpf应用中设计一个权限控制 , 简而言之的说 你懂的 对于IT人员来说都知道的 常见的软件功能 首先要有用户 用户,然后用户属于哪个角色 ,然后各个角色都有自己的可供操作的一堆功 ...
- asp.net权限控制配置web.config
项目下 有三个文件夹 A,B,C 验正方式是 Forms 验正 我要设置他们的访问权限为, A,匿名可访问 B,普通用户授权后才能访问 C,只允许管理员访问 <configuration> ...
- Shiro的认证和权限控制
权限控制的方式 从类别上分,有两大类: - 认证:你是谁?–识别用户身份. - 授权:你能做什么?–限制用户使用的功能. 权限的控制级别 从控制级别(模型)上分: - URL级别-粗粒度 - 方法级别 ...
- shiro权限控制入门
一:权限控制两种主要方式 粗粒度 URL 级别权限控制和细粒度方法级别权限控制 1.粗粒度 URL 级别权限控制 可以基于 Filter 实现在数据库中存放 用户.权限.访问 URL 对应关系, 当前 ...
- 简单的RBAC用户角色权限控制
Java web项目中,无论项目是大是小,或多或少都会涉及到用户访问权限的控制,权限管理总体的设计思路就是,不该看的不看,不该做的不做!据我目前的了解,我所知道的几种实现访问权限控制的方式有: JQu ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性(转载)
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- asp.net core mvc权限控制:在视图中控制操作权限
在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...
- asp.net core mvc权限控制:分配权限
前面的文章介绍了如何进行权限控制,即访问控制器或者方法的时候,要求当前用户必须具备特定的权限,但是如何在程序中进行权限的分配呢?下面就介绍下如何利用Microsoft.AspNetCore.Ident ...
随机推荐
- python 学习笔记 多进程
要让python程序实现多进程,我们先了解操作系统的相关知识 Unix/Linux操作系统提供了一个fork()系统调用,他非常特殊,普通的函数调用,调用一次,返回一次,但是fork调用一次, 返回两 ...
- Oracle存储过程学习笔记
SQL是一种语言! SQL是一种语言! SQL是一种语言! 个人理解:存储过程就相当于Java中的方法;声明变量区域就相当于java中的声明局部变量一样,只是放到一个指定区域定义了 一.先看一部分基础 ...
- 一次Ubuntu下的排雷记录
起因 某天,发现一台服务器上出现了一个大量占用cpu资源的进程.尝试手动杀掉,但很快就会自动重新创建新的进程. 追查 用命令lsof -p 10316 查看其文件路径: 该进程文件夹/proc/103 ...
- 【 Zabbix 】nginx监控及故障重启服务
zabbix agentd 端配置: nginx.conf 配置: location /ngx_status { stub_status on; access_log off; allow 10.0. ...
- hdu4240 求一条流量最大的路/(此题网上百分之90以上算法是错误的)
题意:求最大流/一条流量最大的路的流量.(此题HDU上数据水,下面俩种错误的都能过....) 思路1;每次增广的时候更新流量,保存最大的那条. 错误性:每次更新,有可能最大的那条流量是前几次已经增广 ...
- 一次处理CentOS服务器被攻击往外发广播包
情况是这样:我们在某地托管的一台linux服务器,突然接到机房电话说是我们机器将整个IDC网络搞瘫了.外部机器没法访问IDC. 挂掉电话后:我就开始考虑,托管机器的机房是有硬防的,我本身一台机器怎么 ...
- magento 调整产品详细页自定义选项或配置项的位置
默认位置如下图,感觉不美观 调整后,如下图 打开后台产品页,找到Design下的Display product options in属性,可以看到两个选项:Product Info Column和Bl ...
- 最小生成树(Minimum Spanning Tree)——Prim算法与Kruskal算法+并查集
最小生成树——Minimum Spanning Tree,是图论中比较重要的模型,通常用于解决实际生活中的路径代价最小一类的问题.我们首先用通俗的语言解释它的定义: 对于有n个节点的有权无向连通图,寻 ...
- 洛谷——P1407 工资
P1407 工资 题目描述 有一家世界级大企业,他们经过调查,发现了一个奇特的现象,竟然在自己的公司里,有超过一半的雇员,他们的工资完全相同! 公布了这项调查结果后,众多老板对于这一现象很感兴趣,他们 ...
- 11、Flask实战第11天:蓝图
蓝图的基本使用 之前我们写的代码都是集中在一个主程序文件里面.这样不利于分层解耦和维护.蓝图的作用就是让我们的flask项目更加模块化结构更加清晰,可以将相同模块的视图函数放在同一个蓝图下,同一个文件 ...