页面权限控制

页面权限控制

Posted on 2010-04-12 14:44 昆鹏 阅读(137) 评论(0) 编辑 收藏
在asp.net页面权限控制中,
应为单独写一个类,类继承system.web.ui.page

在类的构造方法里,
this .Init += new EventHandler(PageBase_Init);
为init事件添加我们要在页面加载中调用的方法,这里我们要调用的方法为PageBase_Init
下面实现这个方法PageBase_Init,在出面写上权限控制就可以了
1: 第一个表
MODULETEAM
DeclInfoEdit.aspx1
LabReturnList.aspx1
GoodsInfoList.aspx1
WarningList.aspx1
ChangePwd.aspx1
LabReturnList.aspx3
DepartmentDeal.aspx3
AcceptVoucher.aspx3
GoodsInfoList.aspx3
WarningList.aspx3
HS_TO_KINDSNAME.aspx3
SAMPLING_LEVEL_SET.aspx3
SAMPLING_SET.aspx3
SAMPLING_SET_USA.aspx3
SELFCODE_TO_HSCODE.aspx3
TeamSet.aspx3
UserAdmin.aspx3
WHERE_LIST.aspx3
ContractVoucherSet.aspx3
DECLVoucherSet.aspx3
GoodsInfoVoucherSet.aspx3
这个表,第一个字段是要受控制访问的页面,第二个字段是能访问这些页面的用户组。
IDUSERNAMEPASSWORDTEAM
2313aaa1114
2316aaa1111
2318aaa1111
2325aaa1111
2315aaa1115
2317aaa1111
2323aaa1111
2312aaa1114
2319aaa1111
2321aaa1111
2328aaa1111
这个是用户表,关键是最后一个字段,表示用户所属的用户组,而相应的用户组才可以访问到相应的模块,或者页面
到此,数据库的设置完毕。
 
首先,自己设计一个类(PageBase),此类继承System.Web.UI.Page,受访问控制的页面必须 继承这个类。这个类的代码如下:
public class PageBase:System.Web.UI.Page 

     public PageBase() 
    { 
     // 
     // TODO: 在此处添加构造函数逻辑 
     // 
     this .Init+= new EventHandler(PageBase_Init); 
    } 
     private void PageBase_Init( object sender, EventArgs e) 
    { 
     if (Session[ "UserName" ]== null
     { 
         this .Response.Redirect( "../back/error.aspx?ErrorInfo=超时或没登陆" ); 
     } 
     else  
     { 
         if (! this .UserRight(Session[ "UserName" ].ToString(), this .ModuleName( this .Request.Path.ToString()))) 
        { 
         this .Response.Redirect( "../back/error.aspx?ErrorInfo=你没权限登陆,请与管理员联系" ); 
        } 
     } 
 
    } 
     private bool UserRight( string UserName, string ModuleName) 
    { 
     MyLibrary.MMClass objMMClass = new MMClass(); 
     if ( objMMClass.Oracle_ReturnThings_Adapter(System.Configuration.ConfigurationSettings.AppSettings[ "strConn" ], "select * from View_UserRight where UserName='" +UserName+ "' and module='" +ModuleName+ "'" ).Tables[0].Rows.Count>0) 
     { 
         return true
     } 
     else  
     { 
         return false
     } 
        
    } 
     private string ModuleName( string path) 
    { 
     string [] str=path.Split('/'); 
     return str[str.Length-1].Trim(); 
 
    } 
}
在此,对此类作简单的解释:
关键点是重写了PageBase_Init(object sender, EventArgs e),而受访问控制的页面继承此类后,每次加载时,都会先执行这个事件。在这个事件里,执行了用户身份的验证。
至此,用户身份的验证基本结束,呵呵,其实一开始我听说给系统上权限是很复杂的事情,是企业应用开发的核心技术,我自己在系统里面上了框架后,觉得也不过如此!
下面开始简单描述一下,怎么在页面里用超级管理员的身份灵活的进行权限设置。
 设置页面如下:
用户组权限设置
页面有5个身份,检务科长,检务人员,查验科长,查验人员,超级管理员。
每个身份对应一个用户组(1,2,3,4,5)
上面的页面每个功能模块基本上对应一个页面。
此页面加载的时候,就已经在数据库里把每个用户组的相应的权限读出来,显示在页面上
页面加载时执行的程序如下:
private void DropDownSelect() 
                { 
                         this .CheckBoxList1.ClearSelection(); 
                        objDataSet=objMMClass.Oracle_ReturnThings_Adapter(System.Configuration.ConfigurationSettings.AppSettings[ "strConn" ], "select * from TeamTable where team=" +Convert.ToInt32( this .DropDownList1.SelectedValue)); 
                         int i; 
                         for (i=0;i<objDataSet.Tables[0].Rows.Count;i++) 
                        { 
                                 int j; 
                                 for (j=0;j< this .CheckBoxList1.Items.Count;j++) 
                                { 
                                         if (objDataSet.Tables[0].Rows[i][ "module" ].ToString()== this .CheckBoxList1.Items[j].Value) 
                                        { 
                                                 this .CheckBoxList1.Items[j].Selected= true
                                        } 
                                } 
                        }
作为管理员身份,可以随意给每个用户组相应的权限。点击“确定”按钮后。执行以下程序
private void Button1_Click( object sender, System.EventArgs e) 
                { 
                         
                        objMMClass.Oracle_NoReturnThings(System.Configuration.ConfigurationSettings.AppSettings[ "strConn" ], "delete from TeamTable where team=" +Convert.ToInt32( this .DropDownList1.SelectedValue)); 
                         int i; 
                         for (i=0;i< this .CheckBoxList1.Items.Count;i++) 
                        { 
                                 if ( this .CheckBoxList1.Items[i].Selected) 
                                { 
                                        objMMClass.Oracle_NoReturnThings(System.Configuration.ConfigurationSettings.AppSettings[ "strConn" ], "insert into TeamTable (module,team) values ('" + this .CheckBoxList1.Items[i].Value+ "'," +Convert.ToInt32( this .DropDownList1.SelectedValue)+ ")" ); 
                                } 
                        } 
                }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值