`

[转]web开发中的权限设计拙见一二(1)----设计思路

阅读更多

web开发中的权限设计拙见一二(1)----设计思路

Posted on 2007-01-02 12:11 江上一叶舟 阅读(1653) 评论(17)  编辑  收藏 所属分类: 软件艺术 <!---->

最近项目的项目很奇怪,一个大项目(系统)里包含了很多小的子系统,而这些子系统中都有权限控制的部分,这件事情挺让我头痛的,记得一年前在沈阳,我曾经有一段时间也因因这个问题而疲于奔命,为什么说疲于奔命呢?由于当时项目进度不允许,导致最终系统权限模块草草了事,每个模块都是由读权限字符串来控制用户ACL,当用户无法访问时,提示权限不够。这么做对用户是很不负责任的,既然让用户看到了操作的方式和界面,为什么又告诉用户没有权限呢?我开始怀疑我们是否应该在底层就封杀用户的访问权限。

现在项目开展起来了,虽然目前我已经有了对权限控制的一套方案,并且实施成了我的可重用框架代码,虽然目前的权限也是基于众星捧月的AOP思想,但我至今对权限设计仍有两个疑惑:

疑惑一:很多同行提出方案,想要在底层就截取用户权限,控制用户对方法或者类的访问。这样做的好处在于可以将系统功能与业务逻辑松散耦合,并且实现简单,结构清晰,三两个advisor、filter,或者acegi就能搞定,但在web程序中体现出了他的劣势,当我们将用户的访问拒绝在业务逻辑之外的时候,我们此时是否应该抛出异常提示用户?一旦提示用户没有相应的权限,我认为对于用户来说,这就不是一个perfect practice。由此得出,我们根本就不应该让用户做此次操作,而控制用户操作的源头就是界面,也就是说,在界面上我们就应该对用户的权限元素(如添加按钮、功能菜单等)进行控制。此时,一对矛盾出现了,要控制界面上形形色色的元素只有两种办法,一,将权限与你的界面结合起来设计,这将违背AOP的思想,也使得系统控制模块的重用性大大下降,二,我们借鉴primeton的想法,将权限控制的理念抽取出来,单独做成一套权限系统,解决你所有的需要权限控制的系统需求,这样也有令人头痛的问题,你的所有想用它来控制权限的系统,必须界面上统一风格。或许这样的方式对商业web系统是合适的,毕竟需要你大刀阔斧个性化的地方不多,但我们却很难保证在未来几年内商业web系统的风格不改变。再者,开发这么一个系统也不是一蹴而就的事,在这个问题上一直让我困惑不已。


疑惑二:大多应用的权限判定是基于权限字符串的,但存储在数据库中的权限字符串能够判定的权限并不多,在我们这次项目中,我引用了基于二进制的8421权限判定法则,我深深的感觉到权限字符串的弱势,这使我想起了中国古老一套数学理论-“盈不足术”,超递增序列的魅力在我眼前滑过,

首先我来解释一下盈余不足理论:有十只盒子,第一个盒子里放一个盘子,第二个盒子里放两只,第三个盒子里放四只,第四个盒子里放八只……第九个盒子里放256只,第十个盒子放512只,即第N只箱子里放2^(N-1)只盘子,一共1023只。那么命题如下:在1023这个数字之内,任何一个数目都可以由这十只盒子里的几只组合相加而成。那么1、2、4、8、16、32、64、128、256、512这个序列为什么有这么个魔力?这个数列的特点:1、每项是后一项的二倍,2、每项都比前面所有项的和大,而且大1。这个1就是关键,就因为这个1,它才可以按1递增,拼出总和之内任意一个整数。这个序列叫做超递增序列,它是解决背包问题的基础。3、拼出总和之内任意一个整数可以由这个序列中的一些数构成,且构成方法唯一,据说是密码学中的NP定理。譬如说这个数列总合中20这个数,只能由16+4一种方法构成,由此延伸出来,如果综合中这个数据代表一个权值,我们可以解出它的所有构成参数(操作),如20这个数据,我们可以挨个和序列中每一项按位与,得出来如果不等于0,就说明他是由这个数构成的。

保存权值到int还是varchar对于我们来说是个问题,当然,保存字符串的好处是运算压力小。我们可能听过一个故事,就是把这个超递增序列延伸到第64项,就是那个术士和皇帝在国际象棋棋盘上要米粒的传说。64项的和是一个天文数字!但计算机本身就是一个只认识二进制的机器!很多程序员整天只关心架构,甚至不知道或者不关心位操作是什么玩意,当然我们有朋友担心数据库的int不够长,那么既然可以保存一个只有0、1组成的varchar字符串,为什么不能保存一个十六进制的字符串,有人规定varchar只能保存01吗?十六进制串的长度正好是二进制的四分之一。

由此我们可以无限制的扩展权值操作。

在最近的项目里,我对权限的控制分成两个部分,第一就是用户体验上,我设置了一个权限标签,从数据库中抽取权限信息,然后做到标签里,也凑或算成是界面AOP了,第二就是底层的拦截,用了Spring 的AOP,为的是防止权限冲突,双管齐下。暂时解决权限所需,另外在算法上我用了16进制的权限判别代码,虽然配置较麻烦,写完代码还要写文档说明,不过也解决了权限繁杂又多的问题,暂时就这样了,嘿嘿,以后有空再研究。

分享到:
评论

相关推荐

    hessian的简单使用以及拙见

    在IT行业中,Hessian是一种二进制Web服务协议,它被设计用来提高远程方法调用(RPC)的效率。Hessian是由Caucho Technology开发的,它的目标是提供一种轻量级、高效的通信方式,特别是在Java和.NET之间进行跨平台...

    知识清单3----高考语文---常见谦敬词.doc

    在中国的文化传统中,谦辞和敬辞是日常交际和书面表达中不可或缺的一部分,它们体现了中国礼仪文化的精髓。在高考语文中,了解并掌握这些词汇对于理解古代文献和现代文言文至关重要。以下是对谦敬词的详细解释: 1....

    【创新设计】(辽宁专用)2014高考语文一轮复习 1-6附录 新人教版

    【创新设计】(辽宁专用)2014高考语文一轮复习 1-6附录 新人教版,这部分内容主要涉及的是汉语中的敬词、谦词和雅语的使用,这是中国传统文化中的一种礼仪表达方式,对于提升语言修养和人际交往能力具有重要作用。...

    对嵌入式的一点点拙见

    学习嵌入式的一点点看法,我也只是菜鸟,纯粹把以前走过的弯路写出来,希望对你有点用

    班主任工作如何忙而不乱之拙见.doc

    在当前的教育环境中,班主任作为学校与学生之间的桥梁,肩负着多重角色和责任,既要负责班级管理,还要关注学生的学习与心理状态,同时也要处理家长的关切。在这种情况下,班主任的工作往往繁杂且充满挑战。那么,在...

    功能测试之拙见

    开发转做测试,有朋友的规劝亦有朋友的支持,劝我的说放弃一年半的开发经验做测试不值得,支持的说女孩子做开发太累,做测试可以轻松一下,而我就是决定的事,就一定会做下去的,既然觉得做测试了,我便不会后悔。...

    node-routing-decorators:类似于ASP MVC的路由框架,该框架允许通过装饰器轻松创建路由

    我不喜欢.NET环境(尤其是Windows开发环境),但是我真的很喜欢.NET:有两件事: 第一种是,(在我的拙见中)这是一种非常出色,稳定且功能强大的编程语言,具有Java最好的语言,还有一些非常不错的附加编程概念,...

    对“孙悟空每次指认妖精唐僧最初都不相信”的一点拙见.pdf

    对“孙悟空每次指认妖精唐僧最初都不相信”的一点拙见.pdf

    优质课件(2022-2023)病句改错题.ppt

    在提供的文字材料中,有一段示例文本用于分析和改正病句。这段文字是为了感谢读者对杂志的支持,宣布将进行读者调查活动。题目要求找出必须删去的和不能删去的词语。分析如下: 1. 必须删去的词语: - "为了感谢...

    文学常识(整理完).doc

    1. **中国传统节日及其相关习俗、诗词名句**: - 春节:正月初一,吃汤圆、水饺,放爆竹,拜年。王安石的《元日》描绘了这一盛况。 - 元宵节:正月十五,吃元宵,观花灯,也是中国的情人节。辛弃疾和欧阳修的词...

    【仅用于个人整理记忆】Python中列表的pop()函数用法

    声明: ...index:可指定欲删除元素的索引,默认为-1,即最后一个元素 举例: #随机初始化一个列表 lt = [1, 2, 3] lt.pop() print(lt)#[1, 2] lt.pop(1) print(lt)#[1, 3] a = lt.pop() print(a)#

    xIFr:适用于Firefox [和Chrome]的Web浏览器的Exif查看器WebExtension

    xIFr是一个浏览器扩展,用于查看jpg图像文件中的EXIF,IPTC和XMP元数据。 从桌面浏览器的右键单击上下文菜单中启动它。 原则上,xIFr是“跨浏览器兼容”的网络扩展。 尽管目前无法通过Chrome网上应用店购买,但...

    formula-docs:SaltStack公式的文档和标准化

    SaltStack文档中描述了或多或少的官方约定和最佳实践。 但是,根据我长期的经验,根据我的拙见(IMHO),其中一些建议和约定不适合实际使用。 该文档描述了我的配方标准化,这对我非常有用。 邀请每个人对此进行...

    装机-系统-软件安装顺序

    1 系统安装(我用的系统非纯净版集成了有些驱动 例:网卡驱动)(安装需时:现定20minutes XP系统 稳定性较好)"&gt;装机 系统 软件安装顺序 系统及软件 现今我对系统及软件配置拙见: (以下仅为&quot;本人&quot;...

    活体人脸识别,识别人脸,识别张嘴和摇头动作,并拍照

    这里简单介绍一下当时的开发思路和一些个人拙见,欢迎大神指点。 首先说一下讯飞第三方的人脸识别的几个缺点:1.识别不稳定,各点坐标跳动偏差比较大,不容易捕捉;2.CPU使用率比较高,连续识别一会儿手机会明显发...

    lotus数据库导出SQLServer数据库程序及源代码

    开发思路: 使用ADO通过ODBC链接进行Louts数据读取,在建立一个与SQL server数据库相连的ADO,将读取数据写入SQL server数据库。 安装环境: 首先安装lotus_notes853_win_SC(lotus客户端软件) 然后安装LOTUS_...

    FE-advance-road:进阶资深前端开发

    另外在编码的过程中能较好的对代码进行设计,让后人编写及维护代码起来不至于骂街。 第二点就是建立起团队的基础设施,解放大家的劳动力,减少重复工作,把更多的时间投入到编码。 那么到底学习哪些内容可以提升以上...

    handlebars-helper-minify:{{minify}} 把手助手,用于使用 html-minifier 缩小 HTML

    助手带有一些合理的默认值(在助手创建者的拙见中),但如果需要,可以轻松自定义它们。 这里有两种(方便的)设置选项的方法: 选项对象:将选项对象作为参数传递给助手。 例如{{#minify opts.obj}} 。 options ...

    Java源码企业进销存管理系统-intro-to-akka-streams:akka-streams简介

    以我的拙见,该标准将开创工程师设计企业解决方案的方式,并最终支持多个系统响应式操作的开放标准。 流处理是与 Actor 模型或 Future 组合不同的范式,因此可能需要仔细研究这个主题,直到您熟悉工具和技术。 -- ...

Global site tag (gtag.js) - Google Analytics