asp。net权限控制

 

一:数据库的设计 

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
GoodsPassVoucherSet.aspx3
SamplingVoucherSet.aspx3
ChangePwd.aspx3
AcceptVoucher.aspx4
Input.aspx3
DeclInfoEdit.aspx3
GoodsInfoList.aspx4
WarningList.aspx4
DepartmentDeal.aspx2
ChangePwd.aspx2
LabReturnList.aspx4
ChangePwd.aspx4
Input.aspx5
ChangePwd.aspx5

 

这个表,第一个字段是要受控制访问的页面,第二个字段是能访问这些页面的用户组。

 

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)+")");
                    }

                }

            }

    FrameWork权限管理 v1.0.8源码 源码描述: 其主要的功能就是,进行后台管理模块整合. 1)其可以支持多个应用,多个模块的权限管理. 2)支持Access和MsSql200/2005及Oracle9i以上. 3)采用角色来进行权限的授权,每个用户可以属于多个角色,享有交差权限. 4)整合方便,权限检测采用httpmodule方式检测.基本不用对原有程序进行修改,便可将原有程序进行整合. 5)可视化编辑,全新的Menu和Tab控件.支持拖拉式编辑. 6)统一的事件日志管理,所有登陆操作都有安全记录. 7)每个模块的每个栏目对应一个目录, 栏目的权限抽象分为(查看/新增/修改/删除/排序/打印/备用A/备用 8).目录里有一个web.config来进行目录文件权限配置,可直接将某个文件名设定到相对应的权限上. v1.0.8版更新记录 1.增加树状菜单样式,以适应多分类. 2.“查询”功能的地方,如果第一次查询后进行过翻页操作,再进行第二次的查询结果会停留在之前的页码处 3.Url地址权限判断,需要做长度对比.如设置defautl.aspx?cmd=122 则会自动匹配 defautl.aspx?cmd=122xxxxxxx 4.修改模块分类,提示请输入权限名称,其内容不可以为空 5.插入在线人员出错,重复值InsertOnlineUser 6.应用字段增加后,应用名称为输入框. 7.sys_FieldValueFromKey sys_FieldValueList 方法,排序为顺序acs 8.增加对应用的排序 9.增加操作日志删除和导出 10.date.js控件,选中当前日期返回值出错 11.登陆时,如已经登陆用户,点确认后直接登陆,不要让用户再重新输入用户名和密码 12.http://www.supesoft.com/bbs/disp.asp?B_T_ID=1313 13.修改默认同一ip登陆时出错次数为20次就禁止此ip登陆60分钟. 14.用户资料管理员,管理员只能管理自己部门下的用户(修改/删除) 15.后台增加禁止登陆ip限制.
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值