解析大型.NET ERP系统 权限模块设计与实现
权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少。总结我接触过的权限模块,以享读者。
1 权限的简明定义
ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事。
| 文句 | 含义 | 说明 |
| 谁 | 部门+岗位职责 | 也可以不与部门岗位绑定,省略角色定义。 |
| 能否 | 能(True) 否(False) | 用0或1,true/false表示能否执行 |
| 做 | 增加/删除/修改/查询/统计/打印/过帐 | 权限对象 |
| 哪些 | 通用的/本人的/本组别的/本部门的/本公司的/其他的/多帐套的 | 范围:行政部的办公文具采购申请,PMC运行物料需求计划产生采购部的物料采购计划。 |
| 事 | 数据(如客户、供应商、订单、报表等) |
关于”能否”文句,支持组合拼接。比如有三个权限对象,分别是增加,删除,修改。用户A只有修改权限,用数字1表示有权限,则A用户的权限字符串可以表示为001,这样可以满足动态增加权限对象的需求。
关于部门岗位职责,也就是通常说的角色(Role),因为角色的含义着重在于实际的业务理解,系统很难控制到这样细节的地方,我们的ERP系统省略了角色表,将权限与用户直接绑定。
2 权限的分类
1) 系统权限 System Login 是否登入系统,能执行哪些模块,可以看到哪些操作菜单项。对没有权限操作的界面应该隐藏或变灰,避免提示”对不起,您没有权限”。
2) 功能权限 Module/Function 对模块和功能能否有执行权限,功能是系统执行权限控制的基本单元。对模块权限的操作,可批量设置模块下功能的权限,程序最终进行判断的地方还是以功能权限为依据。
2) 数据权限 Data/Field 对功能涉及到的数据是否有增删查改的权限,能否编辑和查看相同单据其它用户的数据,能否查看与编辑特殊字段的数据(字段权限),常常是指金额类字段。比如采购模块的采购收货与仓库模块的采购收货,后者应该会隐藏与关联的采购订单中的物料价格信息。字段权限可以与用户或用户组别绑定。
3 权限设计方法:基于角色的访问机制(Role-Based Access Control,RBAC)
先设计用户组别,对用户组别分配权限,再创建用户绑定到用户组别。表与其字段定义:
用户组别(用户组别编码,已取消)
用户组别模块(用户组别编码,模块编码,模块名称,新增权限,删权限除,修改权限,过帐权限,打印权限)
用户组别模块功能(用户组别编码,模块编码,功能编码,新增权限,删权限除,修改权限,过帐权限,打印权限)
用户既可以按照模块批量增加权限,也可单独的逐个功能增加权限。涉及字段权限的地方需要单独设置。
4 优化权限模块设计
1) 考虑多帐套(多数据库)情况下,授权的一致性。要求提取业务数据库中的相似数据到框架数据库中。
2)系统集成。需要考虑与LDAP/DBMS系统的集成性。与域集成时,可以实现免登录直接进入系统。当与其它数据库集成时,根据需要设计各自的用户提供程序,比如OracleUserProvider,MySQLUserProvider,分别实现连接到Oracle和MySQL数据库中执行权限判断。
3) 与硬件设备集成。执行权限判断时自动识别硬件设备,比如Smart Card智能卡或加密狗。
4) 用户密码需要加盐或是MD5加密,或是DES可逆算法加密。拒绝明文存储密码,密码丢失后可用密码重置功能重设密码,考虑强密码策略,包含字母数字和特殊字符组成的密码。
5) 登录限制,限制用户必须在指定的区域(IP地址范围,局域网子网,域)才能登录使用。
6) 对没有权限的功能,应该隐藏或是变灰,以解决权限难题。比如按钮没有变灰或隐藏,点击按钮后才进行权限判断,提示”对不起,您没有权限”,这类提示很不友好,应该要预先判断权限。
7) 考虑用户密码过期,超过一定时间范围后用户必须修改密码以增加安全性。
8) 管理员分配初始密码时,考虑密码生成工具,生成随机字符串密码,符合Windows强密码供管理员使用。
5 业务逻辑中的权限控制
ERP系统中有一些权限控制的地方,比如价格控制,信用控制,流程控制等。这些控制不在通用权限系统中考虑。
举例说明,ERP系统中的用户权限。
| 模块 | 权限 | 说明 |
| 系统 | 可进入所有公司 | 否则只能进入指定的公司帐套 |
| 系统 | 可执行多帐套操作 | A公司的销售单产生B公司的采购单 |
| 销售 |
可使用所有客户 |
需要使用指定的客户 |
| 销售 | 允许关闭报价单 | 报价单关闭后不能再生成销售单 |
| 销售 | 隐藏销售价格 | 销售功能中隐藏价格字段 |
| 销售 | 允许销售单修改单价 | 销售功能中不允许修改单价 |
| 销售 | 销售功能中执行价格下限控制 | 销售功能中执行总金额控制,比如客户A的信用上限20万,向客户A卖出货物价值超过20万时,单据无法通过记帐或审核。 |
| 采购 | 可使用所有供应商 | 否则只能用指定的供应商 |
| 采购 | 收货单不支持超额收货 | 收货单收货数量为100,是否支持收货120个数量 |
| 采购 | 隐藏进仓成本 | 隐藏物料进仓价格(先进先出,平均成本) |
| 采购 | 隐藏采购价格 | 隐藏物料采购价格 |
这些参数控制分布在ERP系统的各个模块功能中,无法实现抽象化设计。
6 权限对象 动态权限
以上设计中,硬性规定了七种权限,它们是增加,删除,修改,查询,统计,打印,过帐。如果要增加其它的权限则会涉及到比较多的改动。考虑将权限对象本身设计为可动态增加的,比如我需要增加一个数据导出权限(Export),只需要在权限对象表中增加一行记录,并分配可以执行此权限的用户或用户组别,增加代码判断即可完成权限系统的开发。动态权限在大型管理系统中很常见,预先设计的固定的权限在实施时无法满足实际需求时,考虑动态权限设计方法。
用友的系统就是把权限设计为一个代码,用一个表保存用户具有的权限的代码。
7 权限申请与批核生效,权限注销
为避免权限申请人与IT之间的信息沟通不畅,定义权限申请批核和生效流程。
由需要何种权限的用户提出申请,填写权限申请表单,选择需要登入的模块和功能,再经由用户所在的部门负责人审批,权限审批通过后,由IT部门确定,权限申请审批生效。
当用户不再需要登入系统或某种权限时,IT部门直接将用户注销或删除相应的权限,避免审计问题。
8 钻石白菜理论
买白菜时,通常为了白菜价格是八毛还是一块与小贩争论不休,斤斤计较;买钻石时,却为了追求好看,高贵,毫不在乎钻石的价格,只求贵的,好看的钻石。
设计权限模块以实用为主,不追求过度设计,不追求更完美的设计。
能满足现有的客户需求,对未来客户增加需要不涉及太多的改动,这样的权限系统设计就是合理合适的。
解析大型.NET ERP系统 权限模块设计与实现的更多相关文章
- 解析大型.NET ERP系统 业务逻辑设计与实现
根据近几年的制造业软件开发经验,以我开发人员的理解角度,简要说明功能(Feature)是如何设计与实现的,供参考. 因架构的不同,技术实现上会有所差异,我的经验仅限定于Windows Form程序. ...
- 解析大型.NET ERP系统 分布式应用模式设计与实现
C/S架构的应用程序,将一些复杂的计算逻辑由客户端转移到服务器端可以改善性能,同时也为了其它方面的控制..NET Remoting在局域网内调用的性能相当不错.ERP系统中基于.NET Remotin ...
- 解析大型.NET ERP系统 十三种界面设计模式
成熟的ERP系统的界面应该都是从模板中拷贝出来的,各类功能的界面有规律可遵循.软件界面设计模式化或是艺术性的创作,我认可前者,模式化的界面客户容易举一反三,降低学习门槛.除了一些小部分的功能界面设计特 ...
- 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器
企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...
- 解析大型.NET ERP系统 设计异常处理模块
异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...
- 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式
我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...
- 解析大型.NET ERP系统 20条数据库设计规范
数据库设计规范是个技术含量相对低的话题,只需要对标准和规范的坚持即可做到.当系统越来越庞大,严格控制数据库的设计人员,并且有一份规范书供执行参考.在程序框架中,也有一份强制性的约定,当不遵守规范时报错 ...
- 解析大型.NET ERP系统 通用附件管理功能
大型系统具备一个通用的附件管理功能,对于单据中无法清晰表达的字段,用一个附件图片或附件文档表示是最好的方法了.比如物料清单附加一张CAD图纸,销售订单评审功能中附加客户的各种表格,通用附件功能对系统起 ...
- 解析大型.NET ERP系统 企业信息化实施人员工具箱
1 第一次实施会议 当签订合同之后,软件公司与客户约定好会议时间,双方召开第一次实施会议,确定实施的小组人员名单,项目实施周期,培训计划表,实施主计划,系统预备主文件数据准备,软件公司技术支持联系方式 ...
随机推荐
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)
关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...
- 在ASP.NET Core中使用百度在线编辑器UEditor
在ASP.NET Core中使用百度在线编辑器UEditor 0x00 起因 最近需要一个在线编辑器,之前听人说过百度的UEditor不错,去官网下了一个.不过服务端只有ASP.NET版的,如果是为了 ...
- 干货分享:SQLSERVER使用裸设备
干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...
- ExtJS 4.2 Date组件扩展:添加清除按钮
ExtJS中除了提供丰富的组件外,我们还可以扩展他的组件. 在这里,我们将在Date日期组件上添加一个[清除]按钮,用于此组件已选中值的清除. 目录 1. Date组件介绍 2. 主要代码说明 3. ...
- Windows下Visual studio 2013 编译 Audacity
编译的Audacity版本为2.1.2,由于实在windows下编译,其源代码可以从Github上取得 git clone https://github.com/audacity/audacity. ...
- WPF 普通属性变化通知
问题描述:使用ObservableCollection<OrderItem> source 给Datagrid.ItemsSource赋值,在后台更新source集合后,前台Datagri ...
- APEX:对object中数据进行简单处理?
在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑.本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理. 第一步:SongName__c 是一个新建的ob ...
- https 安全验证问题
最近为了满足苹果的 https 要求, 经过努力终于写出了方法 验证 SSL 证书是否满足 ATS 要求 nscurl --ats-diagnostics --verbose https://你的域名 ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...