`
aaa1aaaaa
  • 浏览: 10078 次
  • 性别: Icon_minigender_1
  • 来自: 江西
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

用户权限设计--转2

 
阅读更多
但凡涉及多用户不同权限的网络或者单机程序,都会有权限管理的问题,比较突出的是MIS系统。下面我要说的是MIS系统权限管理的数据库设计及实现,当然,这些思路也可以推广开来应用,比如说在BBS中用来管理不同级别的用户权限。权限设计通常包括数据库设计、应用程序接口(API)设计、程序实现三个部分。这三个部分相互依存,密不可分,要实现完善的权限管理体系,必须考虑到每一个环节可行性与复杂程度甚至执行效率。我们将权限分类,首先是针对数据存取的权限,通常有录入、浏览、修改、删除四种,其次是功能,它可以包括例如统计等所有非直接数据存取操作,另外,我们还可能对一些关键数据表某些字段的存取进行限制。除此,我想不出还有另外种类的权限类别。完善的权限设计应该具有充分的可扩展性,也就是说,系统增加了新的其它功能不应该对整个权限管理体系带来较大的变化,要达到这个目的,首先是数据库设计合理,其次是应用程序接口规范。我们先讨论数据库设计。通常我们使用关系数据库,这里不讨论基于Lotus产品的权限管理。权限表及相关内容大体可以用六个表来描述,如下:1 角色(即用户组)表:包括三个字段,ID,角色名,对该角色的描述;2 用户表:包括三个或以上字段,ID,用户名,对该用户的描述,其它(如地址、电话等信息);3 角色-用户对应表:该表记录用户与角色之间的对应关系,一个用户可以隶属于多个角色,一个角色组也可拥有多个用户。包括三个字段,ID,角色ID,用户ID;4 限制内容列表:该表记录所有需要加以权限区分限制的数据表、功能和字段等内容及其描述,包括三个字段,ID,名称,描述;5 权限列表:该表记录所有要加以控制的权限,如录入、修改、删除、执行等,也包括三个字段,ID,名称,描述;6 权限-角色-用户对应表:一般情况下,我们对角色/用户所拥有的权限做如下规定,角色拥有明令允许的权限,其它一律禁止,用户继承所属角色的全部权限,在此范围内的权限除明令禁止外全部允许,范围外权限除明令允许外全部禁止。该表的设计是权限管理的重点,设计的思路也很多,可以说各有千秋,不能生搬硬套说某种方法好。对此,我的看法是就个人情况,找自己觉得合适能解决问题的用。先说第一种也是最容易理解的方法,设计五个字段:ID,限制内容ID,权限ID,角色/用户类型(布尔型字段,用来描述一条记录记录的是角色权限还是用户权限),角色/用户ID,权限类型(布尔型字段,用来描述一条记录表示允许还是禁止)好了,有这六个表,根据表六,我们就可以知道某个角色/用户到底拥有/禁止某种权限。或者说,这么设计已经足够了,我们完全实现了所需要的功能:可以对角色和用户分别进行权限定制,也具有相当的可扩展性,比如说增加了新功能,我们只需要添加一条或者几条记录就可以,同时应用程序接口也无须改动,具有相当的可行性。但是,在程序实现的过程中,我们发现,使用这种方法并不是十分科学,例如浏览某个用户所拥有的权限时,需要对数据库进行多次(甚至是递归)查询,极不方便。于是我们需要想其它的办法。使用过Unix系统的人们都知道,Unix文件系统将对文件的操作权限分为三种:读、写和执行,分别用1、2、4三个代码标识,对用户同时具有读写权限的文件被记录为3,即1+2。我们也可以用类似的办法来解决这个问题。初步的想法是修改权限列表,加入一个字段:标识码,例如,我们可以将录入权限标识为1,浏览权限标识为2,修改权限标识为4,删除权限标识为8,执行权限标识为16,这样,我们通过权限累加的办法就可以轻易的将原本要分为几条记录描述的权限放在一起了,例如,假定某用户ID为1,库存表对应的限制内容ID为2,同时规定角色类型为0、用户类型为1,我们就可以将该用户具有录入、浏览、修改、删除库存表的权限描述为:2,15,1,1。确实很简单,不是吗?甚至还有更过激的办法,将限制内容列表也加上一列,定义好标识码,这样,我们甚至可以用简单的一条记录描述某个用户具有的对全部内容所具有的全部权限了。当然,这样做的前提是限制内容数量比较小,不然,呵呵,2的n次方递增起来可是数量惊人,不容易解析的。从表面上看,上述方法足以达到实现功能、简化数据库设计及实现的复杂度这个目的,但这样做有个弊端,我们所涉及的权限列表不是相互独立而是互相依赖的,比如说修改权限,其实是包含浏览权限的,例如,我们可能只是简单的设置用户对库存表存取的权限值为录入+修改+删除(1+4+8=13),但事实上,该用户具有(1+2+4+8=15)的权限,也就是说,在这种方案中,13=15。于是当我们调用API询问某用户是否具有浏览权限时,就必须判断该用户是否具有对该数据表的修改权限,因此,如果不能在程序中固化权限之间的包含关系,就不能利用应用程序接口简单的做出判断。但这与我们的目的“充分的可扩展性”矛盾。这个问题如何解决?我想到了另外一种设置标识码的方法,那就是利用素数。我们不妨将录入、浏览、修改、删除、执行的基本标志码定为2,3,5,7,11,当遇到权限互相包含的时候,我们将它的标识码设定为两个(或多个)基本标志码的乘积,例如,可以将“修改”功能的标志码定为3*5=15,然后将所有的权限相乘,就得到了我们需要的最终权限标识值。这样,我们在询问用户是否具有某项权限的时候,只需要将最终的值分解成质因子,例如,我们可以定义一个用户具有录入+修改+删除库存表的权限为 2*15*7=2*3*5*7,即表示,该用户具有了对库存表录入+浏览+修改+删除权限。当然,对权限列表我们使用上述方法的前提是权限列表记录条数不会太多并且关系不是十分复杂,否则,光是解析权限代码就要机器忽悠半宿:)我希望以上的分析是正确且有效的(事实上,我也用这些的方法在不止一套系统中实现),但无论如何,我觉得如此实现权限管理,只是考虑了数据库设计和应用程序接口两部分内容,对于实现,还是显得很费劲。因此,我恳请有过类似设计、实现经验的同志们提出建设性的意见和修改建议。另外,关于数据库设计的思路还有使用二维表的,这将在以后的时间里讨论,关于应用程序接口的设计和实现我也将在利用另外篇幅和大家共同探讨,代码将用类C语法实现(我不喜欢pascal,抱歉)
分享到:
评论

相关推荐

    ASP.NET系统用户权限设计与实现

    ASP.NET 系统用户权限设计与实现 ASP.NET 系统用户权限设计与实现是指在 ASP.NET 系统中设计和实现用户权限控制的机制,以满足电子商务系统对安全性的要求。该机制基于 RBAC(Role-Based Access Control,基于角色...

    OA系统权限管理设计方案-转

    在本文中,我们将深入探讨OA系统权限管理设计的关键要素,包括用户角色、权限分配、访问控制、审计与监控,以及权限策略的制定与实施。 一、用户角色划分 在OA系统中,用户角色是权限管理的基础。角色通常按照组织...

    [转]权限设计

    "权限设计2.rar"可能是一个包含详细资料或源码的压缩包,用于探讨和分享关于权限管理的设计思想和实现方法。下面将深入讨论权限设计的相关知识点。 权限设计的核心目标是确保只有拥有相应权限的用户才能访问或操作...

    数据库课程设计-------------------人力资源管理系统

    此外,还需要考虑权限控制,确保不同用户只能访问和操作其权限范围内的数据。 总的来说,数据库课程设计中的人力资源管理系统涵盖了企业运营的多方面,通过精心设计的数据库,可以有效地支持企业的日常运营和决策,...

    hl-340 USB转串口

    HL-340是一款基于CH340系列的USB转串口控制器,由杭州晶华微电子有限公司设计制造。它支持USB 2.0标准,可提供高达12Mbps的数据传输速率。这款芯片能够模拟多个虚拟COM端口,使得用户能够在操作系统中像操作普通串口...

    数据库课程设计-------图书管理系统

    2. **概念结构设计**:基于需求分析的结果,采用E-R图的形式定义实体、属性以及实体间的联系。 - **实体识别**:识别系统中的实体,如“读者”、“图书”、“管理员”等。 - **属性定义**:定义实体的属性,如读者...

    HL-340 USB转串口线驱动程序 for windows

    标签“HL-340 USB转串口线驱动程序 for windows”进一步强调了这个驱动是专为HL-340设备在Windows操作系统上设计的。 在压缩包子文件的文件名称列表中,"R340"可能是驱动程序的安装文件或者是驱动程序的版本标识。...

    excel 用户权限登录窗体实现

    综上所述,“Excel 用户权限登录窗体实现”涉及到了Excel VBA编程、用户界面设计、数据存储与加密、权限控制等多个知识点。通过学习和实践,我们可以为Excel工作簿构建安全的登录系统,以保护敏感数据。在“登录用户...

    数据库课程设计--宾馆客房信息管理系统.pdf

    2. **数据库的概念设计**: - 使用E-R(实体-关系)方法创建概念模型,抽象出与设计相关的特性。 - 局部概念模式:设计各个部分的ER模型。 - 全局概念模式:整合并优化各个局部模型,形成统一的概念模型。 3. **...

    大型数据库课程设计---火车站票务管理系统.doc

    在权限设计中,设计了不同的权限,以便于控制用户的访问权限。 本系统的设计目的是为了实现火车站票务管理的自动化,通过对需求分析、系统功能分析、面向对象设计、逻辑结构设计、数据库物理结构设计、数据库完整性...

    数据库课程设计--求职网站数据库设计.docx

    这个设计考虑到了求职网站的典型需求,如用户管理、工作发布、简历存储和权限控制,同时也关注了数据库性能和数据安全。通过这样的设计,求职网站能有效地处理大量信息,为用户提供快速的搜索和匹配服务。此外,参考...

    HL-340 USB转串口驱动

    总之,HL-340 USB转串口驱动为用户提供了一个方便的桥梁,将现代计算机与众多依赖串口通信的设备连接起来,其兼容性和易用性使其成为个人和企业的实用工具。无论是开发人员进行系统调试,还是工程师维护旧设备,都能...

    Android高级应用源码-翻翻乐--抢答--转盘.zip

    2. **布局设计**: - 使用XML文件创建布局,如`activity_main.xml`,定义游戏界面的结构。可能包括`LinearLayout`、`RelativeLayout`或`ConstraintLayout`等布局管理器。 - 使用`ImageView`、`TextView`、`Button`...

    毕业论文设计设计--医院门诊管理系统数据库设计课程设计.doc

    实施阶段包括创建数据库、填充测试数据,设置用户权限等。测试环节则要进行功能测试、性能测试、安全性测试等,确保系统能够正确无误地执行所有预定任务,并且在高并发环境下仍能稳定运行。 5. 关键模块介绍: - ...

    PDF转word文件工具 e-pdf to word converter

    PDF转Word文件工具,如"e-PDF To Word Converter",是专为处理PDF文档转换需求而设计的应用程序。PDF(Portable Document Format)是一种广泛使用的文件格式,它能保持文档的原始布局和样式,但不便于编辑。在这种...

    玩转Android之-权限设置

    ### 玩转Android之-权限设置 在深入探讨Android中的权限设置之前,...开发者在设计应用时需要根据实际需求合理选择所需的权限,同时也要注意遵循最小权限原则,避免申请不必要的权限,以提高应用的安全性和用户体验。

    表单建模数据库设计文档-- ecology80

    该设计方案围绕着表单构建过程中的各个环节展开,包括但不限于应用基本信息管理、模块布局与字段属性设置、权限控制、数据联动以及工作流集成等关键领域。下面我们将对每个表的设计目的及其所承载的主要功能进行详细...

    图书馆数据库设计 需求分析 E-R 图 逻辑设计

    * 用户:学生权限借阅,预约和查询和图书管理员权限管理图书的外借,图书上架,旧书移去,新书购进等。 二、概念设计 概念设计是数据库设计的第二步骤。在这个阶段,我们使用 E-R 图描述实体、属性和实体之间的...

Global site tag (gtag.js) - Google Analytics