关于软件权限设置的一点心得体会

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

本人在软件开发过程中关于用户权限处理的一点点心得体会,拿出来与大家共享,希望大家多提宝贵意见。

以往大多数文章资料设置用户权限都是通过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;

}

}

}

}

}

}

以上是我在软件开发过程中关于用户权限设置的一点点心得体会,希望能够抛砖引玉。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航