`
ronghao
  • 浏览: 456960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
E9473dd5-1985-3883-ac98-962354ca10b3
张小庆,在路上
浏览量:8806
社区版块
存档分类
最新评论

对权限系统设计的再思考

阅读更多
什么是权限系统,权限系统究竟在整个系统中起到什么作用,或者说权限系统必须提供哪些功能?
谈谈个人的看法,我认为授权和验证是一个权限系统最基本的功能,而一个更完善的权限系统会增加上如何验证和验证后如何处理这两种功能。
对于一个权限系统的基本元素,我觉得只有两个:Principal(权限主体),权限。用户,用户组,角色等都可以抽象为权限主体这个概念;而权限则是资源+操作的抽象。权限可分为两种,一种纯粹就是资源,没有操作,也可以认为是默认操作;另外一种就是带操作的资源。授权本身没有什么说的,赋予权限主体权限;验证简单的说就是传入权限主体和当前操作需要的权限,然后验证返回说可以操作或是不可以操作yes/no。同时要注意的是验证的时候需要一个类(接口)来返回用户当前所拥有的权限,然后与当前操作需要的权限进行比对,最后返回比对结果。
以acegi为例,下面分开来说明:
首先,acegi是没有授权功能的,它简单把权限主体与资源配置在了xml里,当然这也带来了可扩展性,可以看一个配置:
xml 代码
 
  1. /index.jsp=ROLE_ANONYMOUS,ROLE_USER  
  2.                 /hello.htm=ROLE_ANONYMOUS,ROLE_USER  
  3.                 /logoff.jsp=ROLE_ANONYMOUS,ROLE_USER  
  4.                 /switchuser.jsp=ROLE_SUPERVISOR  
  5.                 /j_acegi_switch_user=ROLE_SUPERVISOR  
  6.                 /acegilogin.jsp*=ROLE_ANONYMOUS,ROLE_USER  
  7.                 /**=ROLE_USER  
/index.jsp,/hello.htm这些URL都是资源,因为它默认的操作就是访问,所以访问特定URL就成了一个权限,ROLE_ANONYMOUS,ROLE_USER无疑就是权限主体。
Acegi对方法访问权限的配置也是和上面一样的。
然后,看看acegi的验证,其实它的验证就是一个个的Voter,当你访问一个方法时,由它获得当前用户和需要的权限(就是该
方法),然后返回yes/no。
OK,这就是一个完整的权限系统了。当然acegi如果仅仅提供上面两个基本功能,它是不会向现在这样成功的,它最大的亮点就是提供了如何验证和验证后如何处理这两种功能。对url它提供了filter,方法也一样提供了Interceptor,这就是如何验证,和我们在action里验证没有任何区别,只是换了一种方式而已。然后它验证后的处理方式:yes就继续往下执行,no就抛出异常最后再处理这个异常。我们在执行每个action前同样也可以做到这一点。
这里着重要提到的是数据权限。比如说A只能对部门A下的数据有查看权限,B可以对部门A的数据有修改权限和对部门B的数据的查看权限。
看起来这个需求是比较麻烦的,但是我们可以按上面说的拆分以下:
资源1:部门A下的数据  ;资源2:部门B下的数据
操作1:查看;    操作2:修改
产生四种权限:
权限1:资源1+操作1 ;权限2:资源1+操作2;权限3:资源2+操作1;权限4:资源2+操作2
权限主体A拥有权限:1 ; 权限主体B拥有权限:2,3
这样就非常清晰了。
总结:我始终认为拥有授权和验证功能就完成了一个完整的权限系统。至于如何去校验权限,不管你是filter还是aop那是具体实现时的细节,采取的不同策略。而验证后的处理则是和不同策略相对应的。在你考虑设计一个权限系统时首先考虑的是如何实现授权和验证,而不是一开始就考虑我是采取filter,还是aop,还是动态改变sql。
谢谢wolfsquare,它的blog相关www.blogjava.net/wolfsquare/archive/2006/07/04/56606.html
分享到:
评论
5 楼 生命火花 2007-03-22  
习惯把权限系统物理独立出来!

比如新的schema,新的db,新的模块,然后在植入原先的系统。
4 楼 andyandyandy 2007-03-22  
ronghao 写道
magice 写道
个人认为数据权限不应该纳入到权限系统范围之内,这样会使权限系统的扩展性比较差,因为每个系统它的数据权限的规则都是不一样的,现在我在做一个通用的权限系统(至少可以满足大部分的需求),我的做法是把数据权限放置到业务逻辑,这样既会使权限系统通用,另外一个方面是数据权限放到业务逻辑本身实现就很简单,何必要增加难度放置到权限系统呢!

我开始也是这样处理和认为的,但是当我使用了acegi的acl部分后,我开始改变了一些想法,我认为是可以有一个通用的抽象的。当然,实现方式参考了acegi的acl。有时间我整理一下

我以前都是把数据权限处理放到业务里,很期待acl方式的权限处理,什么时候给讲讲?
3 楼 giscat 2007-03-22  
业务和权限要分清楚
  两码事
  权限系统是很单纯,纯洁的,
    如果把业务扯进来就复杂罗
2 楼 ronghao 2007-03-21  
magice 写道
个人认为数据权限不应该纳入到权限系统范围之内,这样会使权限系统的扩展性比较差,因为每个系统它的数据权限的规则都是不一样的,现在我在做一个通用的权限系统(至少可以满足大部分的需求),我的做法是把数据权限放置到业务逻辑,这样既会使权限系统通用,另外一个方面是数据权限放到业务逻辑本身实现就很简单,何必要增加难度放置到权限系统呢!

我开始也是这样处理和认为的,但是当我使用了acegi的acl部分后,我开始改变了一些想法,我认为是可以有一个通用的抽象的。当然,实现方式参考了acegi的acl。有时间我整理一下
1 楼 magice 2007-03-21  
个人认为数据权限不应该纳入到权限系统范围之内,这样会使权限系统的扩展性比较差,因为每个系统它的数据权限的规则都是不一样的,现在我在做一个通用的权限系统(至少可以满足大部分的需求),我的做法是把数据权限放置到业务逻辑,这样既会使权限系统通用,另外一个方面是数据权限放到业务逻辑本身实现就很简单,何必要增加难度放置到权限系统呢!

相关推荐

    通用数据权限管理系统设计

    ### 通用数据权限管理系统设计详解 #### 一、引言 在现代企业的信息化管理中,权限管理成为确保数据安全和合理使用的关键环节。一个高效、灵活的通用数据权限管理系统不仅能够提升企业的运营效率,还能更好地保护...

    一文读懂权限系统设计思路.docx

    "权限系统设计思路" 一、权限系统的定义 权限系统是一种控制和限制系统内部用户对某些操作和数据的访问权限的机制。它通过对每个操作后台都上的一道锁,来控制用户对系统和数据的访问权限。只有拥有了这道锁的key...

    关于系统后台的用户权限设计与思考.docx

    例如,用户角色权限系统旨在提供一个安全、灵活的权限管理机制,适用于企业管理各类用户,确保资源的有效利用和安全。 II. 用户角色权限设计: 1. 用户角色定义:明确不同类型用户的角色,如管理员、员工、运维人员...

    建筑智能化系统设计深度的思考.pdf

    【建筑智能化系统设计深度的思考】探讨了在当前科技飞速发展的背景下,建筑智能化系统设计的重要性和具体实施策略。文章指出,随着建筑技术的进步和高新技术的广泛应用,人们对建筑智能化系统的期望日益提高。智能...

    关于图书借阅管理系统的设计思考_图书借阅管理_

    图书借阅管理系统是图书馆信息化建设的核心组成...通过对这些设计思考的深入理解和实施,可以构建出高效、便捷、安全的图书借阅管理系统,以适应现代图书馆的服务需求,提升读者的借阅体验,推动图书馆的数字化进程。

    Forums项目的权限设计思路分析

    设计思考中,错误的做法是创建一个未指定信息对象范围的角色,这可能导致权限过于广泛。正确的做法是使用[角色]+[信息对象ID]来指定用户的特定权限,这样可以更精确地分配职责。权限管理通常包括普通权限信息表(仅...

    Amazon 系统设计真题 20201

    在IT系统设计中,面试常会涉及到实际场景的模拟,以评估候选人的系统设计能力。以下是一些基于给定的亚马逊系统设计真题的详细解释: 1. **设计一个返回唯一ID的服务**:这个服务的核心是确保每次调用时生成的ID都...

    Google 系统设计真题 20201

    在本文中,我们将深入探讨Google系统设计面试中的常见问题,这些问题涵盖了社交媒体、搜索引擎优化、分布式系统、权限控制、数据库选择、实时流媒体服务以及游戏设计等多个领域。这些题目旨在考察候选人在实际工作中...

    饭卡管理系统设计书

    综上所述,《饭卡管理系统设计书》不仅详尽地阐述了系统的核心功能与技术实现,还深入探讨了设计背后的逻辑思考与未来应用前景,是一份集实用性与创新性于一体的优秀课程作业,对于理解和实践管理信息系统领域具有...

    分布式下银行综合业务系统设计思考.pdf

    分布式系统架构在银行综合业务系统设计中的应用成为了解决传统集中式架构问题的重要途径。随着业务的快速发展和市场需求的多样化,传统银行系统的不足逐渐显现,如性能瓶颈、系统复杂性、数据处理效率低下等问题。...

    医院监护系统设计--软件工程课程设计

    8. 安全与隐私:考虑到医疗信息的敏感性,系统设计必须遵循严格的隐私政策和安全标准,例如采用加密技术保护数据,设置权限控制以防止未经授权的访问。 综上所述,医院监护系统的设计涵盖软件工程的多个方面,包括...

    数据库管理系统设计

    ### 数据库管理系统设计知识点 #### 一、系统开发意义 - **提高效率**:通过集成化管理和自动化处理,显著提升超市日常运营效率。 - **信息采集与处理**:收集并处理大量的交易数据,帮助管理层更好地了解销售趋势...

    设计思考07101

    权限的修改是系统设计中的一个重要考虑因素。为了减少频繁改动带来的影响,我们应当设计一个灵活且易于维护的系统。一方面,可以通过解耦合来降低改动对整个系统的影响。例如,增加一个中间层,如人员-卡-卡角色-...

    新媒体时代对手机APP安全防御系统的设计和思考.pdf

    【新媒体时代手机APP安全防御系统设计与思考】 随着移动互联网的快速发展,手机应用程序(APP)已经成为日常生活和工作中不可或缺的一部分。然而,随着用户数量的增加,APP的安全问题也日益凸显,尤其是面临诸如...

    201314毕业设计客户关系管理(CRM)系统设计报告

    - 详细解释系统设计背后的思考和决策,以便后续的改进和维护。 总结,这个CRM系统设计报告全面探讨了从需求分析到系统实现的全过程,旨在构建一个能满足特定行业需求的高效CRM工具,以提高企业与客户之间的互动...

    设计思考07091

    总结来说,设计思考07091的核心是构建一个灵活、可扩展的权限管理系统,通过规则和区域的分离、多对多关系的建立以及权限组和规则组的引入,来实现权限的精细化管理和高效配置。这种设计思路对于大型软件系统的权限...

    java论坛管理系统设计(源代码+论文)

    《Java论坛管理系统设计》是一个基于Java技术的网络社区平台,旨在提供一个互动性强、功能完善的线上讨论环境。这个系统的设计涵盖了软件工程的多个关键领域,包括需求分析、系统设计、编码实现、测试与维护等。以下...

    物联网技术支持下的智能仓储管理系统设计思考.pdf

    1. 用户管理模块主要管理系统当中各用户的信息,包括对用户信息开展赋予权限、修改密码、删除用户、恢复用户、修改权限等功能。 2. 客户管理模块负责显示系统往来客户信息,并提供查询、删除、修改以及保存操作的...

    病历管理系统设计与实现(包含论文和源码).rar

    在系统设计阶段,我们需要考虑以下几个关键模块:用户管理、病历录入、病历查询、权限控制和系统安全。用户管理模块包括医生、护士、患者等不同角色的账户创建、登录和权限分配;病历录入模块需确保数据准确无误,...

Global site tag (gtag.js) - Google Analytics