關於軟體使用權限設定的一點心得體會
來源:互聯網
上載者:User
心得
本人在軟體開發過程中關於使用者權限處理的一點點心得體會,拿出來與大家共用,希望大家多提寶貴意見。
以往大多數文章資料設定使用者權限都是通過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;
}
}
}
}
}
}
以上是我在軟體開發過程中關於使用者權限設定的一點點心得體會,希望能夠拋磚引玉。