asp.net权限控制的方式

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37497941 我们在使用asp.net开发Web程序的时候经常需要进行一些权限控制,如:限制用户没有登陆就无法查看一些页面,又或者是说登陆之后如果不是管理员,或是没有响应的权限就无法进行相关的操作。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37497941

我们在使用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...

相关文章
|
前端开发 .NET 数据安全/隐私保护
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
42 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
100 5
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
117 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
113 0
|
9月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
144 0
|
9月前
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
120 0
|
9月前
|
开发框架 前端开发 .NET
ASP.NET Core MVC 从入门到精通之自动映射(二)
ASP.NET Core MVC 从入门到精通之自动映射(二)
60 0
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
52 0