用户管理模块 DSUserMng 使用方法详细介绍如下:
该用户管理模块为动态库(DLL), 共导出了11个函数,分别为:
UM_Install_File '安装模块
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 下已经进行了测试,运行稳定正常.首先需要把DSUserMng.dll拷贝到系统目录下的system32目录下(我的机器为 C:\WINNT\System32).
如果使用VB, 则把DSUserMng.bas加入到您的VB工程中,即可调用动态库内函数;
如果使用VC, 则把DSUserMng.h加入到您的VC工程中,选择Project/Settings..., 出对话框里选择Link选项, 在Category 选择General, 在Object/library modules中添加DSUserMng.Lib(注:此Lib文件前要加相对路径,要能够被链接器找到, 相信这个用VC的都会设置的:) )
=============================================================================
详细说明
一. 首先使用函数UM_Install_**来安装该用户管理模块,具体使用方法为:
* 如果是在单机上或者局域网内使用该模块,则可以选择UM_Install_File函数,用户名/密码/权限等信息存放到指定的文件中.
BOOL WINAPI UM_Install_File(LPCTSTR szInitAdmin, LPCTSTR szInitKey, LPCTSTR lpConfigFile, LPCTSTR szEncryptCode)
第一个参数 szInitAdmin 指定第一次使用该模块时的初始用户名(即管理员名称)
第二个参数 szInitKey 指定第一次使用该模块时的初始密码(即管理员密码)
第三个参数 szConfigFile 指定使用该模块时的用户信息配置文件存放路径(应该尽量放置在比较隐蔽的地方)
第四个参数 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 指定用户权限管理中心窗口的父窗口句柄.如果不填写, 则以桌面窗口作为父窗口.