拼吾爱程序人生

首页 » 数据库编程 » SQL » 关于软件权限设置的一点心得体会
Systemjudge - 2007-8-6 16:58:00
本人在软件开发过程中关于用户权限处理的一点点心得体会,拿出来与大家共享,希望大家多提宝贵意见。 
 
   
   
   
 
 
   
   
     
       
         
       
     
     
   
 
 
   
   
   
 

      以往大多数文章资料设置用户权限都是通过ActionList与数据库中的权限表相联实现。我经过实践通过控件的Tag属性(每个控件都有一个保留的Tag属性,默认值为0),也可以实现权限的设置,下面我就具体说明实现方法。 
      1、将所有需要设置权限的菜单和按钮的Tag属性从1开始分配不重复的阿拉伯数字(1,2,3......),这里不用0(控件Tag属性的默认值),表示此控件不需做权限设置。 
      2、将所有权限名称加到CheckBoxList中,包括菜单和按钮,其顺序一定要与分配阿拉伯数字的顺序完全一致。 
      3、在数据库中建立操作员表(包括编号、姓名、权限)权限用一个只包含0和1的字符串表示。用0表示有相应的权限(对应的菜单或按钮可用,Enabled=true),用1表示没有相应的权限(对应的菜单或按钮不可用,Enabled=false)。这个字段要设置足够长(我预留了50位),以备扩充之用。 
      4、设置权限主要代码如下: 
      /* qx,用户权限字符串,operator操作员表,privilege权限字段 */      AnsiString qx="";      for (i=1;i<=CheckListBox1->Items->Count;i  ) {            if  (CheckListBox1->Checked[i-1]) {                qx=qx "0";            } else  {                qx=qx "1";            }        }      Sql="update operator set privilege='" qx "'  where Operator_name='" CboOperatorName->Text "'";          5、设置用户的全局变量,在窗体的FormShow事件中加入权限判断代码如下: 
            /* 系统管理员具有所有权限 */            if (FrmDM->GetUserName()!="系统管理员"){            AnsiString qx;            /* 还没有设置权限 */            if (strPrivilege.Length()==0){              for (int j=0;j<=Parent->ComponentCount-1;j  ){                    if (Parent->Components[j]->Tag!=0){                      if  (Parent->Components[j]->ClassNameIs("TMenuItem")){                            ((TMenuItem *)Parent->Components[j])->Enabled=false ;                      } else  {                          ((TButton *)Parent->Components[j])->Enabled=false;                      }                    }                }            } else  {              for (i=1; i<=strPrivilege.Length();i  ){  /*已经设置权限*/                    qx=strPrivilege.SubString(i,1);                    if (qx=="1"){                      for (j=0;j<=Parent->ComponentCount-1;j  ) {                            if (Parent->Components[j]->Tag==i){                              if  (Parent->Components[j]->ClassNameIs("TMenuItem")){                                  ((TMenuItem *)Parent->Components[j])->Enabled=false ;                              }  else  {                                  ((TButton *)Parent->Components[j])->Enabled=false;                                  break;                              }                            }                        }                    }                }            }      以上是我在软件开发过程中关于用户权限设置的一点点心得体会,希望能够抛砖引玉。

 您可能对 [SQL] 的这些文章也感兴趣:

一个查询带有[]的经典语句
使用 Bulk Copy 将大量数据复制到数据库
iBATIS In Action:执行非查询语句(二)
iBATIS In Action:使用高级查询技术(一)
iBATIS In Action:执行非查询语句(一)
使用iBatis和ObjectDataSource轻松实现分页
IBatis.Net使用方法之十二:在IBatis.Net中调用存储过程
IBatis.Net使用方法之一:下载、编译、运行NPetShop
IBatis.Net使用方法之二:两种常用的DAO
IBatis.Net使用方法之三:数据库的缓存模式
IBatis.Net使用方法之四:常用的查询方式
IBatis.Net使用方法之五:再谈查询
1
查看完整版本: 关于软件权限设置的一点心得体会
Modify by pin5i DZNT_ExpandPackage 2.1.3295 2007-2009 pin5i.com
 Total Unique Visitors: