asp.net权限控制

 有人说asp.net很简单,其实呢这只是表面现象。要把asp.net学的很深真的是一件不容易的事情,从开发的角度来说asp.net要方便一些,只是移植性差了一些。学过java之后再来学习就会觉得很简单,很快就可以上手。

下面就接着前面的博客写一个权限控制和内置对象相结合的小例子,这个例子在学校里可谓经典。所以我就借这个小例子来弄下。

1.开发一个用户登录表单,这里只有登录后的用户才能进入下载页面

 


 
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="downloadfile._Default" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" > 
  6. <head runat="server"> 
  7.     <title>用户登录</title> 
  8. </head> 
  9. <body> 
  10.     <form id="form1" runat="server" action="ashx/ToLogin.ashx"> 
  11.      用户名:<input type="text" name="fname"/><br /><br/> 
  12.      密码:<input type="password" name="password"/><br /><br/> 
  13.      <input type="submit" value="登录"/> 
  14.       <input type="reset" value="取消"/> 
  15.     </form> 
  16. </body> 
  17. </html> 

2.新建一个数据库文件,并创建一个数据表

3.添加一个数据集,后面会使用类型化dataset来查询数据库

 

4.编写一般处理程序处理用户登录

 


 
  1. using System; 
  2. using System.Collections; 
  3. using System.Data; 
  4. using System.Linq; 
  5. using System.Web; 
  6. using System.Web.Services; 
  7. using System.Web.Services.Protocols; 
  8. using System.Xml.Linq; 
  9. using System.Web.SessionState; 
  10. using downloadfile.DataSetTeacherTableAdapters; 
  11.  
  12. namespace downloadfile.ashx 
  13.     /// <summary> 
  14.     /// $codebehindclassname$ 的摘要说明 
  15.     /// </summary> 
  16.     [WebService(Namespace = "http://tempuri.org/")] 
  17.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
  18.     public class ToLogin : IHttpHandler, IRequiresSessionState 
  19.     { 
  20.  
  21.         public void Proce***equest(HttpContext context) 
  22.         { 
  23.             context.Response.ContentType = "text/plain"
  24.             string fname = context.Request["fname"]; 
  25.             string password = context.Request["password"]; 
  26.             m_teacherTableAdapter adpater = new m_teacherTableAdapter(); 
  27.            
  28.             var data = adpater.GetDataByFname(fname); 
  29.             var single = data.Single(); 
  30.           if (data.Count <= 0) 
  31.           { 
  32.               context.Response.Write("用户名不存在"); 
  33.           } 
  34.           else { 
  35.               //判断数据的唯一性,防止出现未知错误 
  36.              
  37.               //如果用户输入的密码和数据库的相同,则可以登录成功 
  38.               if (single.fpassword.Equals(password)) 
  39.               { 
  40.                   context.Session["status"] = "login"
  41.                   context.Session["username"] = fname; 
  42.                   context.Session["password"] = password; 
  43.                   context.Session["userid"] = single.fid; 
  44.                   //context.Response.Write("登录成功"); 
  45.                   context.Response.Redirect("../manage/allpicture.htm"); 
  46.  
  47.               }else
  48.                   context.Response.Redirect("../Default.aspx"); 
  49.               } 
  50.               
  51.           } 
  52.         } 
  53.  
  54.         public bool IsReusable 
  55.         { 
  56.             get 
  57.             { 
  58.                 return false
  59.             } 
  60.         } 
  61.     } 

5.编写图片的下载页面

 


 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml" > 
  3. <head> 
  4.     <title>图片下载页面</title> 
  5. </head> 
  6. <body> 
  7.  <center> 
  8.    <div> 
  9.      <a href="../ashx/Download.ashx?filename=1.jpg">1.jpg</a> 
  10.      <a href="../ashx/Download.ashx?filename=2.jpg">2.jpg</a> 
  11.      <a href="../ashx/Download.ashx?filename=3.jpg">3.jpg</a> 
  12.      <a href="../ashx/Download.ashx?filename=4.jpg">4.jpg</a> 
  13.    </div>  
  14.  </center> 
  15.    
  16. </body> 
  17. </html> 

6.编写下载的处理程序,如果是普通用户则下载的图片加水印

 


 
  1. using System; 
  2. using System.Collections; 
  3. using System.Data; 
  4. using System.Linq; 
  5. using System.Web; 
  6. using System.Web.Services; 
  7. using System.Web.Services.Protocols; 
  8. using System.Xml.Linq; 
  9. using downloadfile.DataSetTeacherTableAdapters; 
  10. using System.Web.SessionState; 
  11. using System.Drawing; 
  12. using System.Drawing.Imaging; 
  13.  
  14. namespace downloadfile.ashx 
  15.     /// <summary> 
  16.     /// $codebehindclassname$ 的摘要说明 
  17.     /// </summary> 
  18.     [WebService(Namespace = "http://tempuri.org/")] 
  19.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
  20.     public class Download : IHttpHandler,IRequiresSessionState   
  21.     { 
  22.  
  23.         public void Proce***equest(HttpContext context) 
  24.         { 
  25.             
  26.              
  27.            
  28.             //如果用户已经 
  29.             string status = (string)context.Session["status"]; 
  30.            
  31.            if (status!=null
  32.             { 
  33.                
  34.  
  35.                 
  36.                //取得文件名称 
  37.                string filename=context.Request["filename"]; 
  38.                 //设置消息头用来下载文件 
  39.                 context.Response.ContentType="application/octet-stream"
  40.                 context.Response.AddHeader("Content-Disposition"string.Format("attachment;filename=\"{0}\"", filename)); 
  41.                 //从session取得登录用户的fid 
  42.                int fid=(int)context.Session["userid"]; 
  43.                 //根据用户id查询该用户的级别,根据级别获得不同的下载 
  44.                 //数据集 
  45.                
  46.                 //通过用户的id查询用户的级别 
  47.                 m_teacherTableAdapter adpater = new m_teacherTableAdapter(); 
  48.                 var data = adpater.GetDataById(fid); 
  49.                 var single = data.Single(); 
  50.                 if (single.level == 1) 
  51.                 { 
  52.                     //context.Response.WriteFile("../image/" + filename); 
  53.                     using (Bitmap bitmap = new Bitmap(context.Server.MapPath("../image/" + filename))) 
  54.                     { 
  55.                         using (Graphics gra = Graphics.FromImage(bitmap)) 
  56.                         { 
  57.                             gra.DrawString("免费下载"new Font("宋体", 20), Brushes.Red, 0, 0); 
  58.                             
  59.                         } 
  60.                         bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
  61.  
  62.                     }  
  63.                    
  64.                 } 
  65.                 else { 
  66.                     context.Response.WriteFile("../image/" + filename); 
  67.                 } 
  68.  
  69.  
  70.             } 
  71.             else 
  72.             { 
  73.                 context.Response.Write(status); 
  74.                 //context.Response.Write("请先登录"); 
  75.             } 
  76.            
  77.         } 
  78.  
  79.         public bool IsReusable 
  80.         { 
  81.             get 
  82.             { 
  83.                 return false
  84.             } 
  85.         } 
  86.     } 

7.程序的运行效果

 

 

1、菜单导航管理 2、操作按钮 3、角色管理 4、部门管理 5、用户管理(用户权限) 6、用户组管理(设置成员,用户组权限) 7、系统配置(动态配置系统参数) 8、附加属性(自定义属性) 9、系统日志(异常记录) 10、数据库备份/还原 11、资源管理,(动态数据库) 12、个人信息(基本信息,附加信息,用户角色,拥有权限) 13、首页快捷 14、数据回收站(业务功能删除过数据,全部保留在回收站) 15、系统个性化设置(切换菜单导航) 系统UI,给人感觉非常好,体积小巧,速度快 该源码是适用用于应用系统后台模块的管理(可扩展至支持集中化的权限管理平台), 0.支持N级菜单导航,菜单显示方式支持目前支持2种模式分别:菜单(无限级),横向(2级) 1.动态切换皮肤,目前有两狂UI 蓝色,咖啡色 2.表单验证,文本框高亮起来 3.可以动态分配权限按钮,分配角色权限,目录结构,栏目的链接都可以修改。权限管理非常灵活, 4.可以隐藏左侧导航栏,打开左侧导航栏,默认是打开,table表格都自应大小的 5.动态创建数据表,删除用户表,点击数据 表 可以查询字段信息 6.可以直接执行sql脚本 7.兼容 IE6,7,8,9 /Firefox /Google Chrome 这些浏览器都测试过 8.批量删除,自定义复选框样式,可以全选/反选 9.角色分级,集团和分公司的关系 10.权限 横向就是业务部分,具体负责哪块业务,纵向是级别 11.动态报表设置,并且可以导出Excel 12.登陆日记,操作日记,异常日记 13.海量批量删除数据库,调用公共存储过程,参数,表明,主键 特点: UI:传统html css,美观 漂亮 大方 实用 js框架:jquery 系统大部分使用AJAX操作。大大提高了用户体验 功能描述: 1.支持N级菜单导航,菜单显示方式支持目前支持2种模式分别: 菜单(无限级),横向(2级) 2.表单验证,文本框高亮起来 3.可以动态分配权限按钮,分配角色权限,目录结构,栏目的链接都可以修改。 4.可以隐藏左侧导航栏,打开左侧导航栏,默认是打开,table表格都自应大小的 5.动态创建数据表,删除用户表,点击数据 表 可以查询字段信息 6.可以直接执行sql脚本
ASP.NET权限控制是指在ASP.NET应用程序中对不同用户或角色的访问权限进行管理和控制的一种机制。通过权限控制,可以确保只有具备相应权限的用户才能访问特定的页面、功能或资源,从而保障系统的安全性和合规性。 ASP.NET提供了多种权限控制的方式。其中一种常见的方式是使用角色和认证。角色是对用户进行分类的一种方式,通过为用户分配角色,在系统中可以根据角色对用户的权限进行管理和控制。而认证是指验证用户的身份是否合法,只有通过了认证的用户才可以访问受限资源。 ASP.NET可以通过使用ASP.NET提供的内置的认证和授权机制来进行权限控制。其中认证可以使用Forms身份验证、Windows身份验证等方式,授权可以使用基于角色的授权、基于声明的授权等方式。通过在应用程序中配置认证和授权的策略,可以在代码中对用户进行身份验证和权限验证,实现对不同资源的不同访问控制。 除了使用内置的认证和授权机制外,ASP.NET还支持自定义的权限控制方式。可以根据具体需求,自定义一些过滤器或模块来实现特定的权限控制逻辑。比如可以使用自定义的授权过滤器来对请求做进一步的权限验证,或者使用自定义的模块来拦截请求并根据用户的角色或权限判断是否可以访问某个资源。 总之,ASP.NET权限控制是通过认证和授权机制,对不同用户或角色的访问权限进行管理和控制的一种机制。ASP.NET提供了多种内置的认证和授权方式,同时也支持自定义的权限控制方式。通过合理配置和使用这些机制,可以实现对系统中不同资源的灵活权限控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值