Pb中多用户权限管理实现方案

原创 2001年06月08日 10:50:00

 

              Pb中多用户权限管理实现方案
         (南京审计学院教育技术中心  210029 丁国勇)
    在pb实现一般管理系统的时候,我们会遇到这样一种情况,作为一个系统,可以分为若干个子系统,有多个操作员对它进行操作,每个操作员对各个子系统的权限不同,甚至在同一子系统中,操作员对各个菜单项的
操作权限也不一样,更细一点,不同的操作员对于同一窗口中某一按钮的操作权限也是不一样的,那么,怎样
较好地实现对不同用户细化到某个按钮的权限控制呢?笔者在进行一个系统的开发过程当中,积累了一些心得,与大家探讨一下。
     首先,怎样使得一个操作员不能对他不具权限的菜单项或按钮进行操作呢,我们当然没有必要为不同的用户制作不同的菜单项或窗口(当然这也不失为一种方法),考虑到菜单项和按钮的Visible和Enabled属性,我们自然想到,设置这两个属性便可以完成上面的要求,比如
m_1.m_2.visible=false  
或者
cb_1.enabled=false
菜单不可见了,操作员自然就不可操作了。
    其次,对于一个多用户的系统,我们自然需要用一个表来存放基本的用户信息,其中要包括用户登录系统的
用户名、密码,如果要进行权限的分级控制,还需要一些字段来存放有关权限的信息,有些成品系统中是这样做的,不过它们将每个需要进行控制的菜单项均用一个字段来表示,这样做不太好,万一设计一个权限控制比较细的系统时,这样做的可行性便不好,其实,对与某个菜单项或其他控件,进行权限控制时,状态只有两个,true or false,完全可以用一位二进制数0或1来表示,我们可以将一个子系统中所有需要进行权限控制的项
组合成一个二进制串,每四个二进制数转化成一个字符(可以是"0","1","2"...."a","b","c","d","e","f"),再保存在表中,这样我们来算一下,如果一个子系统中有64个项需要进行权限控制,则只需要一个 64/4=16 位
的字符类型的字段即可以表示,而不像过去那样需要64个字段来分别标记。
好了,第一步存放的问题解决了,那么怎样根据这样的一个标记权限的字符串来设置各个菜单项或其他控件的
visible 或Enabled属性呢?我注意到,pb中菜单项和其它控件都有一个tag属性,而这个属性我们一般不太会用到它,我们可以用tag属性来存放一个数字,这个数字标示了该控件在权限控制字段的那个二进制串中表示该控件的访问权限的0/1的位置,举个例子,有一个权限控制二进制串'01001111010....',菜单项"打开文件"的tag为7,则在该二进制串中第7位"1"便标记了当前用户对"打开文件"的控制权限为"1".
     当一个用户登录系统时,在通过了密码验证后,将他对该系统的权限控制字段的字符串读到一个全局变量中,将该字符串恢复为0、1串,对于每个需要进行权限控制的项,依次根据其tag记录的相应位置的0或1设置Visible或Enabled属性,便可以完成对权限的管理。
当然,要注意的是,有些控件的权限设置并不是在一进入系统后就进行的,而是推迟到该控件被调用时才进行。
下面给出了一个例子,来说明上面的论述。
有以下3个菜单项和2个按钮需要控制
3个菜单项名称分别为:
m_a.m_h1.m_m1  
m_a.m_h1.m_m2
m_a.m_h1.m_m3
以上3个菜单项的tag设置为 1-3
2个按钮位于两个窗口中
cb_1  位于w_1中
cb_2  位于w_2中
以上2个按钮的tag设置为4,5
这样,需要5位来表示他们的访问权限。
函数getbin用来进行从"0","1"...,"a"..."f"到四位二进制串的转换
getbin(string s_ch) returns string
string s_out,s_temp
integer i_len
integer i
string temp
i_len=len(s_ch)
if i_len=0 or isnull(s_ch) then
 s_out="0"
end if
 temp=""
s_temp=""
for i=1  to i_len
temp=mid(s_ch,i,1)
choose case lower(temp)
 case "a"
  s_temp="1010"
 case "b"
  s_temp="1011"
 case "c"
  s_temp="1100"
 case "d"
  s_temp="1101"
 case "e"
  s_temp="1110"
 case "f"
  s_temp="1111"
 case "0"
  s_temp="0000"
 case "1"
  s_temp="0001"
 case "2"
  s_temp="0010"
 case "3"
  s_temp="0011"
 case "4"
  s_temp="0100"
 case "5"
  s_temp="0101"
 case "6"
  s_temp="0110"
 case "7"
  s_temp="0111"
 case "8"
  s_temp="1000"
 case "9"
  s_temp="1001"
 case else
  s_temp="0000"
 end choose
s_out=s_out+s_temp
s_temp=""
next
return s_out
定义一个全局变量s_admin用来存放该用户登录后的权限信息:
String s_temp
select rights into :s_temp where user=:username and password=:userpassword;
s_admin=getbin(s_temp)  //s_admin存放的是已经转化好的权限信息。
 
定义一个权限函数check来完成从 0、1 到true、false 的转换。
check(string menutag) returns boolean
string s_temp
s_temp=mid(s_admin,integer(menutag),1)   //s_admin为全局变量
if isnull(s_temp) or s_temp="1" then
 return true
else
 return false
end if
假设w_main为登录后的主窗口,它的菜单为m_a
则在w_main的open事件中这样写:
m_a.m_h1.m_m1.enabled=check(m_a.m_h1.m_m1.tag)
m_a.m_h1.m_m2.enabled=check(m_a.m_h1.m_m2.tag)
m_a.m_h1.m_m3.enabled=check(m_a.m_h1.m_m3.tag)
在w_1的open事件中:
cb_1.enabled=check(cb_1.tag)
同样,在w_2的open事件中
cb_2.enabled=check(cb_2.tag)
这样就可以完成对上述5项的控制。
当然,这种方法在需要控制的项很多时(达到几十项)的效果才比较明显。
以上论述了权限控制的实现,在多用户系统中,还需要有对用户权限的设置功能,这个和上面
时一个相反的过程,相信读者在看完上面的内容之后一定会掌握权限设置的做法,这里就不再冗述了。
以上是笔者在实际开发过程中的一点心得,欢迎与我交流探讨:netmuse@njai.edu.cn

 

 

 

 

PB权限控制的完整方案

 PB权限控制的完整方案 分类: 编程开发 2009-05-11 16:04 2363人阅读 评论(0) 收藏 举报 menunullusertablecsyba...
  • tlammon
  • tlammon
  • 2015年07月16日 12:59
  • 406

大数据之Hadoop平台(五)Hadoop多用户管理

前言 最近有一些需求,就是需要在hadoop集群中实现多用户管理,因此在网上搜了很多的资料。其中有一种方法感觉还是比较可行,链接:http://cn.soulmachine.me/blog/2014...
  • PicassoLoveCoding
  • PicassoLoveCoding
  • 2014年10月20日 14:43
  • 1824

深入探讨大数据权限管理方案-从哲学到技术

不论是在技术层面还是在产品层面,大数据平台环境下的权限管理工作都是一个让人伤脑筋的烫手山芋,它不仅仅是一个技术问题,还是一个业务问题,甚至还可能是一个人际沟通和权衡利益得失的哲学问题。。。所以,以下内...
  • colorant
  • colorant
  • 2017年11月30日 09:49
  • 402

Java 实现系统权限控制思路

首先介绍下思路: 1、用户表 user; 2、角色表 role; 3、菜单 menu; 4、角色菜单权限表 role_menu; 5、用户菜单权限表 user_menu; 如图: 根据用户角...
  • u014266877
  • u014266877
  • 2016年12月19日 14:47
  • 18732

PB级海量数据服务平台架构设计实践 | 文末福利

基于PB级海量数据实现数据服务平台,需要从各个不同的角度去权衡,主要包括实践背景、技术选型、架构设计,我们基于这三个方面进行了架构实践,下面分别从这三个方面进行详细分析讨论:一、实践背景该数据服务平台...
  • bntX2jSQfEHy7
  • bntX2jSQfEHy7
  • 2018年01月25日 00:00
  • 52

pb中多用户权限的实现方法

pb实现一般管理系统的时候,我们会遇到这样一种情况,作为一个系统,可以分为若干个子系统,有多个操作员对它进行操作,每个操作员对各个子系统的权限不同,甚至在同一子系统中,操作员对各个菜单项的操作权限也不...
  • youzhi1007
  • youzhi1007
  • 2009年09月09日 21:40
  • 375

Linux权限详解,多用户多组各种权限配置原理

网上有太多关于Linux权限详解,这里不啰嗦那些。主要解释下这些权限是杂用的,否则知道了什么用户、组之类的权限也配不好。 一、权限分类 r:读取权限,数字代号为"4"。 w:写入权限,数字代号为"2"...
  • hytfly
  • hytfly
  • 2015年01月12日 19:37
  • 3581

PB实现自己的权限管理

实现上图的权限管理,请教大家的设计思路 员工表 create table employee (   employee_id          varchar(10)          ...
  • winwhere
  • winwhere
  • 2009年09月16日 07:33
  • 1574

JAVAWEB开发之权限管理(一)——权限管理详解(权限管理原理以及方案)、不使用权限框架的原始授权方式详解

知识清单 1.了解基于资源的权限管理方式 2. 掌握权限数据模型 3. 掌握基于url的权限管理(不使用Shiro权限框架的情况下实现权限管理) 4. shiro实现用户认证 5. shiro实现用户...
  • u013087513
  • u013087513
  • 2017年07月13日 13:35
  • 12987

第五章、Linux用户及权限详解

第五章、Linux用户及权限详解03_04_Linux用户及权限详解今天内容:用户、组、权限用户,用户组: 都只是标识符安全上下文(secure context): 权限:r, w, x 文件:r:可...
  • Toormi
  • Toormi
  • 2015年08月13日 16:47
  • 1051
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Pb中多用户权限管理实现方案
举报原因:
原因补充:

(最多只允许输入30个字)