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

转载 2004年09月23日 09:18:00

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

    在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项的控制。

    当然,这种方法在需要控制的项很多时(达到几十项)的效果才比较明显。

    以上论述了权限控制的实现,在多用户系统中,还需要有对用户权限的设置功能,这个和上面

    时一个相反的过程,相信读者在看完上面的内容之后一定会掌握权限设置的做法,这里就不再冗述了。

PB权限控制的完整方案

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

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

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

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

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

用户权限管理设计方案

用户认证管理设计方案 1 设计思路 为了设计一套具有较强可扩展性的用户认证管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。 1.1 用户 用户仅仅是纯粹的用户,用来...
  • Jye13
  • Jye13
  • 2013年06月03日 08:17
  • 2209

关于Hadoop多用户管理支持客户端远程操作的理论总结

1、问题 Hadoop客户端如何配置可远程操作Hadoop;Hadoop多用户情况下,是如何管理权限并分配存储空间和计算能力,保证集群的稳定。 2、Hadoop平台 要理解客户端如何通过指定用户...
  • fjssharpsword
  • fjssharpsword
  • 2016年04月27日 16:52
  • 3302

HDFS多用户管理ACL机制other权限访问控制的理解

非Master服务器用户也能通过客户端远程访问Hadoop 现象:在Hadoop集群多用户管理实践中发现,客户端用非Master服务器配置的用户连接Master,也通用具备对指定目录的操作权限。比如...
  • fjssharpsword
  • fjssharpsword
  • 2016年04月29日 11:11
  • 3363

如何通过excel实现用户权限控制

在程序设计中,为了让程序更好的适应每个用户的不同需求,我们经常需要给角色设置一定权限,权限的设置有很多的方式,这篇文章主要介绍一下如何通过excel表格来设置用户权限。...
  • u010942465
  • u010942465
  • 2015年05月31日 21:11
  • 1592

三种权限设计方案的归纳和比较

权限设计是很多系统重要的组成部分,主要用于控制功能和流程,本文将几种常见的权限设计方案(权限系统的名都是自己起的)的基本设计写出来,其中不恰当处还请大家指出,我们来讨论一下.1.等级权限系统这种权限系...
  • sunhuwh
  • sunhuwh
  • 2015年11月09日 22:47
  • 2262

OA系统权限管理设计方案

(转)OA系统权限管理设计方案 - 游陆之家 Gis 之家 ArcGIS SuperMap MapGis ArcINfo 地理信息系统 - CSDN博客   2010-05-13 10:10:12|...
  • w2393040183
  • w2393040183
  • 2015年01月03日 23:00
  • 4176

权限管理及实现思路

一个系统包含众多模块,要求能够通过权限管理,控制不同用户对模块的访问权限,而且需要控制到对某个模块的某个操作(增删改查)的级别。一般情况下,通过角色对用户进行统一授权,在某些特殊情况下,能够单独对用户...
  • liusong0605
  • liusong0605
  • 2013年02月28日 21:25
  • 11658
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Pb中多用户权限管理实现方案
举报原因:
原因补充:

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