权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色很多。总结我接触过的权限模块,以享读者。算法
ERP权限管理用一句简单的话来讲就是:谁 可否 作 那些 事。数据库
文句 | 含义 | 说明 |
谁 | 部门+岗位职责 | 也能够不与部门岗位绑定,省略角色定义。 |
可否 | 能(True) 否(False) | 用0或1,true/false表示可否执行 |
作 | 增长/删除/修改/查询/统计/打印/过账 | 权限对象 |
哪些 | 通用的/本人的/本组别的/本部门的/本公司的/其余的/多账套的 | 范围:行政部的办公文具采购申请,PMC运行物料需求计划产生采购部的物料采购计划。 |
事 | 数据(如客户、供应商、订单、报表等) |
关于”可否”文句,支持组合拼接。好比有三个权限对象,分别是增长,删除,修改。用户A只有修改权限,用数字1表示有权限,则A用户的权限字符串能够表示为001,这样能够知足动态增长权限对象的需求。安全
关于部门岗位职责,也就是一般说的角色(Role),由于角色的含义着重在于实际的业务理解,系统很难控制到这样细节的地方,咱们的ERP系统省略了角色表,将权限与用户直接绑定。框架
1) 系统权限 System Login 是否登入系统,能执行哪些模块,能够看到哪些操做菜单项。对没有权限操做的界面应该隐藏或变灰,避免提示”对不起,您没有权限”。ide
2) 功能权限 Module/Function 对模块和功能可否有执行权限,功能是系统执行权限控制的基本单元。对模块权限的操做,可批量设置模块下功能的权限,程序最终进行判断的地方仍是以功能权限为依据。工具
2) 数据权限 Data/Field 对功能涉及到的数据是否有增删查改的权限,可否编辑和查看相同单据其它用户的数据,可否查看与编辑特殊字段的数据(字段权限),经常是指金额类字段。好比采购模块的采购收货与仓库模块的采购收货,后者应该会隐藏与关联的采购订单中的物料价格信息。字段权限能够与用户或用户组别绑定。优化
先设计用户组别,对用户组别分配权限,再建立用户绑定到用户组别。表与其字段定义:编码
用户组别(用户组别编码,已取消)加密
用户组别模块(用户组别编码,模块编码,模块名称,新增权限,删权限除,修改权限,过账权限,打印权限)spa
用户组别模块功能(用户组别编码,模块编码,功能编码,新增权限,删权限除,修改权限,过账权限,打印权限)
用户既能够按照模块批量增长权限,也可单独的逐个功能增长权限。涉及字段权限的地方须要单独设置。
1) 考虑多账套(多数据库)状况下,受权的一致性。要求提取业务数据库中的类似数据到框架数据库中。
2)系统集成。须要考虑与LDAP/DBMS系统的集成性。与域集成时,能够实现免登陆直接进入系统。当与其它数据库集成时,根据须要设计各自的用户提供程序,好比OracleUserProvider,MySQLUserProvider,分别实现链接到Oracle和MySQL数据库中执行权限判断。
3) 与硬件设备集成。执行权限判断时自动识别硬件设备,好比Smart Card智能卡或加密狗。
4) 用户密码须要加盐或是MD5加密,或是DES可逆算法加密。拒绝明文存储密码,密码丢失后可用密码重置功能重设密码,考虑强密码策略,包含字母数字和特殊字符组成的密码。
5) 登陆限制,限制用户必须在指定的区域(IP地址范围,局域网子网,域)才能登陆使用。
6) 对没有权限的功能,应该隐藏或是变灰,以解决权限难题。好比按钮没有变灰或隐藏,点击按钮后才进行权限判断,提示”对不起,您没有权限”,这类提示很不友好,应该要预先判断权限。
7) 考虑用户密码过时,超过必定时间范围后用户必须修改密码以增长安全性。
8) 管理员分配初始密码时,考虑密码生成工具,生成随机字符串密码,符合Windows强密码供管理员使用。
ERP系统中有一些权限控制的地方,好比价格控制,信用控制,流程控制等。这些控制不在通用权限系统中考虑。
举例说明,ERP系统中的用户权限。
模块 | 权限 | 说明 |
系统 | 可进入全部公司 | 不然只能进入指定的公司账套 |
系统 | 可执行多账套操做 | A公司的销售单产生B公司的采购单 |
销售 | 可以使用全部客户 |
须要使用指定的客户 |
销售 | 容许关闭报价单 | 报价单关闭后不能再生成销售单 |
销售 | 隐藏销售价格 | 销售功能中隐藏价格字段 |
销售 | 容许销售单修改单价 | 销售功能中不容许修改单价 |
销售 | 销售功能中执行价格下限控制 | 销售功能中执行总金额控制,好比客户A的信用上限20万,向客户A卖出货物价值超过20万时,单据没法经过记账或审核。 |
采购 | 可以使用全部供应商 | 不然只能用指定的供应商 |
采购 | 收货单不支持超额收货 | 收货单收货数量为100,是否支持收货120个数量 |
采购 | 隐藏进仓成本 | 隐藏物料进仓价格(先进先出,平均成本) |
采购 | 隐藏采购价格 | 隐藏物料采购价格 |
这些参数控制分布在ERP系统的各个模块功能中,没法实现抽象化设计。
以上设计中,硬性规定了七种权限,它们是增长,删除,修改,查询,统计,打印,过账。若是要增长其它的权限则会涉及到比较多的改动。考虑将权限对象自己设计为可动态增长的,好比我须要增长一个数据导出权限(Export),只须要在权限对象表中增长一行记录,并分配能够执行此权限的用户或用户组别,增长代码判断便可完成权限系统的开发。动态权限在大型管理系统中很常见,预先设计的固定的权限在实施时没法知足实际需求时,考虑动态权限设计方法。
用友的系统就是把权限设计为一个代码,用一个表保存用户具备的权限的代码。
为避免权限申请人与IT之间的信息沟通不顺畅,定义权限申请批核和生效流程。
由须要何种权限的用户提出申请,填写权限申请表单,选择须要登入的模块和功能,再经由用户所在的部门负责人审批,权限审批经过后,由IT部门肯定,权限申请审批生效。
当用户再也不须要登入系统或某种权限时,IT部门直接将用户注销或删除相应的权限,避免审计问题。
买白菜时,一般为了白菜价格是八毛仍是一块与小贩争论不休,斤斤计较;买钻石时,却为了追求好看,高贵,绝不在意钻石的价格,只求贵的,好看的钻石。 设计权限模块以实用为主,不追求过分设计,不追求更完美的设计。 能知足现有的客户需求,对将来客户增长须要不涉及太多的改动,这样的权限系统设计就是合理合适的。