关于作者

用户名:duxxp
笔名:duxxp
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:12
评论个数:64
留言条数:7




Powered by BlogDriver 2.1

DUX的博客

 

强烈推荐: 用户权限管理模块 AdvDSUM 3.0 (原DSUserMng 2.0) 位置:文章分类 - 我的程序 - 用户权限管理模块 AdvDSUM 介绍

文章

发布新版本眼睛卫士2.0
摘要:在各位用户的大力支持下,新版本的眼睛卫士 2.0 发布了! 查看全文

- 作者: duxxp 2006年06月22日, 星期四 11:13  回复(12) |  引用(0) 加入博采

XUsers 用户权限模块(OCX版)
摘要:详情请查看公司网页 www.aurow.nease.net 查看全文

- 作者: duxxp 2005年08月31日, 星期三 09:16  回复(0) |  引用(0) 加入博采

眼睛卫士1.4发布
摘要:在广大用户的建议与支持下,新的眼睛卫士1.4发布啦! 查看全文

- 作者: duxxp 2005年08月15日, 星期一 09:17  回复(39) |  引用(0) 加入博采

用户权限管理的模块实现

在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      注册为正版>>

- 作者: duxxp 2005年04月16日, 星期六 01:04  回复(0) |  引用(0) 加入博采

用户权限管理模块 AdvDSUM 介绍
摘要:在编写管理信息系统(MIS)软件中,您是否对于繁琐的多用户权限管理而头痛?需要对不同的用户设置不同的权限,需要添加/删除用户,并进行相应的管理.您是否对这些功能感到厌烦? 现在,用户权限管理模块 DSUserMng 能给您解决一切问题! 查看全文

- 作者: duxxp 2005年04月16日, 星期六 00:21  回复(1) |  引用(0) 加入博采

用户权限管理模块 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 指定用户权限管理中心窗口的父窗口句柄.如果不填写, 则以桌面窗口作为父窗

口.



 

- 作者: duxxp 2005年04月15日, 星期五 11:26  回复(0) |  引用(0) 加入博采