关于web应用程序安全的思考(四)----一种全新的权限管控思想
2008-11-26 13:35:52 来源:WEB开发网从上面可以看出﹐程序员在开发系统时是无需关注任何关于权限管控的非业务代码的﹐它们只需按照系统设计时的流程完成程序即可。而在开发时配置权限数据﹐运行时动态分配权限更是让系统可适应于任何的关于权限需求变更。
不知道有没有读者发现﹐订单审核时的权限是如何实现的?
数据权限的概念﹕
用户在需求中提出﹕在”订单审核”时﹐销售经理可以打印其所在区域的订单﹐管理员审核所有订单。
这种情况我们将其认定为数据权限。而数据权限归属于业务需求﹐对于业务需求我们认为其实现必须和业务代码在一起开发。
比如在这里﹐我们会在设计时
指定这个页面的初始化流程﹕抓出当前登录用户-->抓出当前登录用户的权限区域-->将权限区域数据代入抓出待审核订单。
指定用户单击审核按钮时的流程﹕找到当前选择的订单号-->调用审核方法进行审核-->显示审核结果
从这里我们可以看出﹕
1. 对于用户应该审核哪些订单数据﹐我们并没有依据其是管理员还是区域经理﹐而是将这种情况认定为数据权限﹐这在以后面对用户的这部分需求变更时可以无需任何系统更新动作。
àA区域经理在休假后﹐B区域经理代理其审核A区域的订单。
à由于某种原因﹐要求C区域经理和D区域经理共同审核C区域和D区域的订单。
àE区域经理升迁为副总后﹐审核E,F,G,H区域的订单。
à总经理要求﹐他自己可以在系统运行时﹐指定他的几位助手审核他指定的某些区域的数据
因此抽象出數據权限﹐并且将其归类到业务功能上﹐我们很容易就可以处理这些需求的变更
2. 通过系统的初始化流程可以看出﹕不会出现用户审核到他无权审核的订单这种情况﹐因为我们在程序开发时﹐就是抓的权限区域下的订单﹐因此用户只能审核其有权审核的订单
顺便再提一下﹕系统中出现的关于”管理员”,”注册用户”,”普通用户”,”财务部门”,”仓库管理者”等这些群组对象﹐不管在业务程序中还是在权限判断时﹐都不会出现任何关于这些的hardcode代码﹐他们只不过是用户对应权限的一种方式而已﹐不是权限系统所必须的
关于web应用程序安全方案的完整实现请继续关注这个系列
更多精彩
赞助商链接