|
用户名:duxxp 笔名:duxxp 地区: 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
强烈推荐: 用户权限管理模块 AdvDSUM 3.0 (原DSUserMng 2.0) 位置:文章分类 - 我的程序 - 用户权限管理模块 AdvDSUM 介绍
发布新版本眼睛卫士2.0
XUsers 用户权限模块(OCX版)
用户权限管理的模块实现
在MIS(管理信息系统)中,用户权限和功能限定的代码是重用率较高的。本文对用户权限进行了研究,并以 用户权限管理模块 AdvDSUM 初步实现了目标。
最简单的,对于一个用户来说,对于一个操作,他只有两个状态:可以执行,不可以执行。对应的可以分别用1和0表示。这样如果有N个操作,对于一个用户U,需要一个N位的权限向量数组,用以记录每个操作的可执行状态。假如共有6个操作需要进行用户权限控制,分别为操作1,操作2,...,操作6,则如果用户具有可以执行操作2,操作4和操作5的权限,则对应的权限向量表示为:
011010
这里右边开始第1位对应着操作1的可执行状态,右边开始第6位对应着操作6的可执行状态。
在实际情况中,有很多是多个具有相同权限的用户组成一个组,称为用户组。组内的用户具有相同的权限。这样,对于任何一个组,也需要一个N位的权限向量数据,记录该组对应的各个操作的状态。然而,如果组内的一个用户V比较特殊,除了其所属组的权限之外,需要额外的权限,传统的分组用户权限管理就无法实现,或者只能新建立一个组,用以存放用户V。因此本文提出一个新的名词:用户额外权限,即除了用户所属组权限之外,用户还拥有的权限。例如,同样以上述的6个操作为例,如果用户组"Group1"具有执行操作1,操作2和操作5的权限,其所包含2个用户U1和U2,其中U2除了具有基本的组权限之外,还具有额外权限:可以执行操作4,则他们的权限向量分别表示为:
组Group1: 010011
用户 U1: 010011
用户 U2: 011011
其中U2为具有额外权限的用户。
以本文为基础,DUX Studio 软件开发工作室开发出了 用户权限管理模块 AdvDSUM (Advanced Dux Studio User Management),运行稳定,效果良好,欢迎广大用户下载注册。
用户权限管理模块 AdvDSUM 介绍
用户权限管理模块 AdvDSUM 使用说明

用户管理模块 AdvDSUM 使用方法详细介绍如下:
该用户管理模块为动态库(DLL), 共导出了12个函数,分别为:
UM_Install_File '安装模块(到文件)
UM_Install_Reg '安装模块(到注册表)
UM_Install_DB '安装模块(到数据库)
UM_AddPrivilegePoint '添加权限点
UM_CheckPrivPointS '检测权限点
UM_CheckPrivPointI '检测权限点
UM_Login '用户登陆
UM_Logout '用户注销
UM_ChangeKey '修改密码
UM_GetCurrentUser '获取当前登陆用户名称
UM_IsAdmin '判断当前登陆用户是否管理员
UM_ManageUser '用户管理
=============================================================================
前期准备
当前该模块在Visual C++ 6.0 和Visual Basic 6.0 下已经进行了测试,运行稳定正常.首先需要把
AdvDSUM.dll拷贝到系统目录下的system32目录下(我的机器为 C:\WINNT\System32).
如果使用VB, 则把AdvDSUM.bas加入到您的VB工程中,即可调用动态库内函数;
如果使用VC, 则把AdvDSUM.h加入到您的VC工程中,选择Project/Settings..., 出对话框里选择Link
选项, 在Category 选择General, 在Object/library modules中添加AdvDSUM.Lib(注:此Lib文件前要加相
对路径,要能够被链接器找到, 相信这个用VC的都会设置的:) )
=============================================================================
详细说明
一. 首先使用函数UM_Install_**来安装该用户管理模块,具体使用方法为:
* 如果是在单机上或者局域网内使用该模块,则可以选择UM_Install_File或者UM_Install_Reg函数,
用户名/密码/权限等信息存放到指定的文件或者注册表中.
BOOL WINAPI UM_Install_File(LPCTSTR szInitAdmin, LPCTSTR szInitKey, LPCTSTR
lpConfigFile, LPCTSTR szEncryptCode)
第一个参数 szInitAdmin 指定第一次使用该模块时的初始用户名(即管理员名称)
第二个参数 szInitKey 指定第一次使用该模块时的初始密码(即管理员密码)
第三个参数 szConfigFile 指定使用该模块时的用户信息配置文件存放路径(应该尽量放置在比较隐
蔽的地方)
第四个参数 szEncryptCode 指定使用该模块时的用户信息加密掩码(随意设置最大为8个字节长度的
字符串,设定后一般不要更改.如果一定要更改,运行前需要手工删除原有的配置文件)
BOOL WINAPI UM_Install_Reg(LPCTSTR szInitAdmin, LPCTSTR szInitKey, DWORD dwRegRoot,
LPCTSTR szRegKey, LPCTSTR szRegValue, LPCTSTR szEncryptCode)
第一个参数 szInitAdmin 指定第一次使用该模块时的初始用户名(即管理员名称)
第二个参数 szInitKey 指定第一次使用该模块时的初始密码(即管理员密码)
第三个参数 dwRegRoot 指定使用该模块时的用户信息配置文件存放注册表根路径,例如:
dwRegRoot = UM_HKEY_CLASSES_ROOT (1)表示在主键HKEY_CLASSES_ROOT下
dwRegRoot = UM_HKEY_LOCAL_MACHINE(4)表示在主键HKEY_LOCAL_MACHINE下
第四个参数 szRegKey 指定使用该模块时的用户信息存放的子键路径名,例如:
szRegKey = "Software\Dux Studio\AdvDSUM"
第五个参数 szRegValue 指定使用该模块时的用户信息存放的项名称,例如:
szRegKey = "UserData"
第六个参数 szEncryptCode 指定使用该模块时的用户信息加密掩码(随意设置最大为8个字节长度的
字符串,设定后一般不要更改.如果一定要更改,运行前需要手工删除原有的配置文件)
* 如果是在局域网或者广域网内使用该模块,则可以选择UM_Install_DB函数,用户名/密码/权限等信
息存放到指定的数据库中.
BOOL WINAPI UM_Install_DB(LPCTSTR szInitAdmin, LPCTSTR szInitKey, LPCTSTR szConnect,
LPCTSTR szTableName, LPCTSTR szEncryptCode)
第一个参数 szInitAdmin 指定第一次使用该模块时的初始用户名(即管理员名称)
第二个参数 szInitKey 指定第一次使用该模块时的初始密码(即管理员密码)
第三个参数 szConnect 指定使用该模块时的用户信息文件存放数据库连接字符串(此连接串应该具有
创建表和查询权限)
第四个参数 szTableName指定使用该模块时的用户信息存放数据库表的名称(Oracle数据库需要在表
名称前加表空间名称,如 MySpace.MyTable)
第五个参数 szEncryptCode 指定使用该模块时的用户信息加密掩码(随意设置最大为8个字节长度的
字符串,设定后一般不要更改.如果一定要更改,运行前需要手工删除原有的表,否则运行时会出错)
其中数据库连接字符串提供如下:
Oracle 数据库
"Provider=OraOLEDB.Oracle.1;Data Source=myDataSource;User
Id=myUserID;Password=myPassword"
SQL Server数据库
"Provider=SQLOLEDB.1;User ID=myUserID;password=myPassword;Initial Catalog=数据库
名称;Data Source=SQLSERVER服务器名称"
ACCESS数据库
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库mdb文件路径;User Id=myUserID;
Password=myPassword"
二. 定义每一个需要进行权限控制的操作为权限点, 您需要画出一个在您的程序中所需的全部权限点表(
在纸上即可:)),便于明确管理. 前面为权限点索引号(各索引号不能相同), 后面为权限点名称(各名称不
能相同).例如下表所示:
1, 添加
2, 修改
3, 删除
4, 连接数据库
5, 打印
6, 复制
7, 粘贴
8, 保存
...
此表用于用户权限管理时使用,使得用户管理员可以在权限管理中心对用户进行权限分配,指定用
户可以执行哪些功能,不能执行哪些功能. 在调用了模块安装函数UM_Install_**以后, 即可调用函数
UM_AddPrivilegePoint来添加权限点.
BOOL WINAPI UM_AddPrivilegePoint(LPCTSTR lpPrivilegeName, int iIndex = -1)
第一个参数 lpPrivilegeName 指定要添加权限点的名称
第二个参数 iIndex 指定要添加权限点的索引号(范围从1 ~ N, N为所有权限点个数).如果不指定权
限点索引号,则模块可以自动指定.
三. 在程序中设定用户是否有执行指定操作的权限. 在所有需要进行操作控制的地方加入权限点检测函数
,判断当前用户是否对该操作有执行权限. 检测函数有两个 UM_CheckPrivPointS 和
UM_CheckPrivPointI, 分别用于检测指定权限点名称和权限点索引, 使用任何一个即可.
BOOL WINAPI UM_CheckPrivPointS(LPCTSTR szPrivName, BOOL bShowMsgBox)
第一个参数 szPrivName 指定要检测的权限点的名称
第二个参数 bShowMsgBox指定是否在用户没有权限执行该操作时,弹出对话框进行提示(TRUE为弹
出,FALSE为不弹出)
BOOL WINAPI UM_CheckPrivPointI(int iPrivIndex, BOOL bShowMsgBox)
第一个参数 iPrivIndex 指定要检测的权限点的索引号
第二个参数 bShowMsgBox指定是否在用户没有权限执行该操作时,弹出对话框进行提示(TRUE为弹
出,FALSE为不弹出)
两个函数都返回BOOL型值,如果当前用户有执行该操作的权限,返回TRUE; 如果当前用户没有执行该操
作的权限,返回FALSE.
例如, 您现有的程序内有某一操作 (3,打印) 在函数 Print 内执行, 则在函数 Print 内部分开头加
入权限检测函数即可:
BOOL Print(...)
{
if(!UM_CheckPrivPointS("打印", TRUE))
return FALSE;
...
}
四. 调用UM_Login函数弹出用户登陆对话框,输入用户名和对应密码即可登陆. 如果登陆成功,返回1
(UM_OK); 不成功,返回0(UM_CANCEL).
int WINAPI UM_Login(HWND hParent)
第一个参数 hParent 指定登陆对话框的父窗口句柄.如果不填写, 则以桌面窗口作为父窗口.
如果需要程序一开始就进行用户登陆, 可以在程序的一开始写入如下代码:
// 程序开始处,已经执行了函数UM_Install_**
{
if(UM_Login() == 0)
return ; //退出整个程序
...
}
当第一次运行该程序时,需要填写初始用户名和初始密码, 进入程序后再更改.
五. 调用UM_Logout函数弹出注销当前用户对话框, 点击[确定]即可退出当前用户登陆状态.
int WINAPI UM_Logout(HWND hParent)
第一个参数 hParent 指定注销对话框的父窗口句柄.如果不填写, 则以桌面窗口作为父窗口.
六. 调用UM_ChangeKey函数弹出修改密码对话框, 可以修改当前用户的登陆密码.
int WINAPI UM_ChangeKey(HWND hParent)
第一个参数 hParent 指定修改密码对话框的父窗口句柄.如果不填写, 则以桌面窗口作为父窗口.
七. 调用UM_GetCurrentUser得到当前登陆的用户名称。
八. 调用UM_IsAdmin返回当前用户是否是管理员,TRUE是管理员, FALSE不是管理员
九. 调用UM_ManageUser弹出用户权限管理中心窗口, 可以进行用户的添加/删除/权限修改等操作. 注:运
行时只有属于"系统管理"组的用户才可以调用该功能.
int WINAPI UM_ManageUser(HWND hParent)
第一个参数 hParent 指定用户权限管理中心窗口的父窗口句柄.如果不填写, 则以桌面窗口作为父窗
口.