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

心得

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

       以往大多数文章资料设置用户权限都是通过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;
                               }
                            }
                        }
                     }
                 }
             }
      以上是我在软件开发过程中关于用户权限设置的一点点心得体会,希望能够抛砖引玉。

时间: 2024-09-14 10:24:04

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

使用Webbrowser的一点心得体会

原文:使用Webbrowser的一点心得体会         自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下,与网友们共享吧.         1.如何获得"打开网页出错"信息        在DocumentCompleted事件中,判断Document.Url.AbsoluteUri中的"res://":标志即可(以前总用e.Url,怪不得总截取不到)   

如何查找技术资料----我的一点心得体会

作为一个IT人员,如果不能利用搜索引擎很快地查找到自己想要的技术资料的话,那么会很悲剧!特别是面对新技术的时候,由于资料特别少,就算有,大部分也是英文资料.如果这时候,你查找资料的能力比不上别人的话,很有可能就会在新一轮的技术竞赛中被甩在后面,比如现在很火的ios游戏开发.android由于搞的人多,资料也相对来说多一些,门槛也低一些,不需要mac,只要有一台pc就可以弄.但是,接下来的wphone7呢?你准备好了吗? 我来博客园也有将近半年时间了,在入园的时候,我写了一篇<如何学习iphone

选择域名的一点心得体会

域名对一个网站来说,也是很重要的.如果http://www.aliyun.com/zixun/aggregation/37858.html">域名选择的好,对网站的发展可以取得促进的作用.现在好的域名已经很少了.短的域名和有特定意义的域名已经屈指可数了.那我们选择域名到底要注意什么呢?当然这个问题很多老手都有很多的想法,在这里就不把选择域名要注意的方方面面一一阐述,我要讲的是我自己的一点体会和心得. 选择域名是如果可以尽量选择网站的中文拼音,这样对你的网站非常有好处.他既可以让网友一眼就可

使用Prototype的一点心得体会(二)

使用Element对象 ( API: http://www.prototypejs.org/api/element ) 1.addClassName方法 <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script>... function chg() ...{ Element.addCla

谈谈论坛推广的一点心得体会

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 做论坛细算起来也有两年多了,从做斑竹,再到博客,然后就是cms,再到独立,然后就回归到dz了,经验不多,因为我的网站其实也没有真正成功过,下面是我的一些经验教训,希望能给大家一些帮助. 作网站,特别是论坛,首要的就是选择好论坛的定位这是决定你的网站能不能发展起来或能走多远的决定因素,也是作网站的第一考量因素. 一.作站前的准备 1. 一定是自

使用Prototype的一点心得体会(六)

关于扩展: 1.扩展Array <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script>... var a = ['hello','world']; var b = ['wawa','anno']; var c = [a, b]; var d = [c , 'china'] alert

使用Prototype的一点心得体会(五)

1. 使用Class对象 <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script> var Person = Class.create(); Person.prototype = ...{ initialize: function(name) ...{ this.name = name

使用Prototype的一点心得体会(四)

使用Field对象操作表单域 ( API: http://www.prototypejs.org/api/form) 示例代码: <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> </head> <body> <input id="text1" type=&

使用Prototype的一点心得体会(三)

使用Enumerable类 ( API: http://www.prototypejs.org/api/enumerable) 1.collect方法 <html> <head> <script src="prototype-1.6.0.2.js" type="text/javascript"></script> <script>... var a = [20,30,40,50]; alert(a.coll